gpt4 book ai didi

python - 无法使用 pandas groupby.apply 添加列

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:24 24 4
gpt4 key购买 nike

最初我有下表:

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 返回任意大小甚至标量的数据框。

这可能是一个错误吗?

最佳答案

partial bug与按 MultiIndex in columns 分组有关。

如果在索引中使用 MultiIndex,它会进行少量修改 - 删除用于分组的级别以避免重复级别。

您的解决方案通过转置 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

关于python - 无法使用 pandas groupby.apply 添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com