我想計算資料框中缺失的變數。我有很多變數要計算,還有很多變數要分組。我知道如何為組中的一個變數執行此操作,但不是幾個:
import pandas as pd
df=pd.DataFrame({'type':['A', 'A', 'B'], 'var1':[1, None, 2],'var2':[None, None, 3]})
vars=['var1', 'var2']
df.drop('type', 1)[vars].isna().groupby(df.type, sort=False).sum().reset_index()
嘗試:
df=pd.DataFrame({'type':['A', 'A', 'B'], 'type2':['Z', 'Y', 'Y'], 'var1':[1, None, 2],
'var2':[None, None, 3]})
df.drop(['type', 'type2'], 1).isna().groupby(df[['type', 'type2']], sort=False).sum().reset_index()
grouping_vars = ['type', 'type2']
df.drop(grouping_vars, 1).isna().groupby(df[grouping_vars], sort=False).sum().reset_index()
上面的兩種嘗試都給了我
ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional.
我猜我不了解groupby這里的基本內容,因此非常感謝任何幫助!
uj5u.com熱心網友回復:
您不能將資料框用作分組器,因為它是二維物件。Groupby 需要一維陣列/系列作為分組器。因此,為了修復錯誤,您可以創建一維系列( grp_cols) 的串列,然后將其用作分組器來計算缺失值
keys = ['type', 'type2']
grp_cols = [df[k] for k in keys]
df.drop(keys, axis=1).isna().groupby(grp_cols, sort=False).sum().reset_index()
或者,有一種更簡單的方法,您必須首先將分組列設定為索引,然后使用isna groupby來sum計算缺失值
keys = ['type', 'type2']
df.set_index(keys).isna().groupby(keys, sort=False).sum().reset_index()
type type2 var1 var2
0 A Z 0 1
1 A Y 1 1
2 B Y 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428717.html
上一篇:我想用中間值替換年齡列中的每個值
