[英]Can't add a column by using pandas groupby.apply
最初我有下表:
df=pd.DataFrame(
np.arange(4*8).reshape(4,8),
index=list('abcd'),
columns=pd.MultiIndex.from_arrays([list('EEEETTTT'), list('XXYYZZWW'), list('rsrsrsrs')] )
)
E T
X Y Z W
r s r s r s r s
a 0 1 2 3 4 5 6 7
b 8 9 10 11 12 13 14 15
c 16 17 18 19 20 21 22 23
d 24 25 26 27 28 29 30 31
我在( , ,'s')
多索引列旁邊添加了一個名為'V'
的新列,如下所示:
E T
X Y W Z
r s V r s V r s V r s V
a 0 1 0 2 3 0 6 7 0 4 5 0
b 8 9 0 10 11 0 14 15 0 12 13 0
c 16 17 0 18 19 0 22 23 0 20 21 0
d 24 25 0 26 27 0 30 31 0 28 29 0
我運行以下代碼以獲得上述結果:
dfl=[]
for name, x in df.groupby(level=[0, 1], axis=1):
index = pd.IndexSlice
x.loc[:,index[name[0],name[1],'V']]= 0
dfl.append(x)
pd.concat(dfl, axis=1)
現在我嘗試了以下“替代”方法來獲得相同的結果:
def f(x):
idx = pd.IndexSlice
x.loc[:, idx[x.name[0], x.name[1], 'V']]=0
return x
df.groupby(level=[0,1], axis=1).apply(f)
然而,令我驚訝的是,結果表保持不變:
E T
X Y Z W
r s r s r s r s
a 0 1 2 3 4 5 6 7
b 8 9 10 11 12 13 14 15
c 16 17 18 19 20 21 22 23
d 24 25 26 27 28 29 30 31
pandas groupby.appy(func) 應該允許 func 返回任何大小甚至標量的數據幀。
這可能是一個錯誤嗎?
這是與MutiIndex in columns
的MutiIndex in columns
分組相關的部分錯誤。
如果MultiIndex in index
使用MultiIndex in index
,它會進行小的修改 - 刪除用於分組的級別以避免重復級別。
您的解決方案是通過轉置MultiIndex in index
來修改的,應用函數並轉回:
def f(x):
idx = pd.IndexSlice
x.loc[idx[x.name[0], x.name[1], 'V'], :]=0
x.index = x.index.droplevel([0,1])
return x
df = df.T.groupby(level=[0,1], axis=0).apply(f).T.astype(int)
print (df)
E T
X Y W Z
r s V r s V r s V r s V
a 0 1 0 2 3 0 6 7 0 4 5 0
b 8 9 0 10 11 0 14 15 0 12 13 0
c 16 17 0 18 19 0 22 23 0 20 21 0
d 24 25 0 26 27 0 30 31 0 28 29 0
def f(x):
idx = pd.IndexSlice
x.loc[idx[x.name[0], x.name[1], 'V'], :]=0
return x
df = df.T.groupby(level=[0,1], axis=0).apply(f).T.astype(int)
print (df)
E T
X Y W Z
E E T T
X Y W Z
r s V r s V r s V r s V
a 0 1 0 2 3 0 6 7 0 4 5 0
b 8 9 0 10 11 0 14 15 0 12 13 0
c 16 17 0 18 19 0 22 23 0 20 21 0
d 24 25 0 26 27 0 30 31 0 28 29 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.