小编Jon*_*mmm的帖子

pandas groupby 应用于多列以生成新列

我喜欢使用 groupby-apply 在 Pandas 数据框中生成一个新列。

例如,我有一个数据框:

df = pd.DataFrame({'A':[1,2,3,4],'B':['A','B','A','B'],'C':[0,0,1,1]})
Run Code Online (Sandbox Code Playgroud)

并尝试通过 groupby-apply 生成一个新列“D”。

这有效:

df = df.assign(D=df.groupby('B').C.apply(lambda x: x - x.mean()))
Run Code Online (Sandbox Code Playgroud)

因为(我认为)它返回一个与数据帧具有相同索引的系列:

In [4]: df.groupby('B').C.apply(lambda x: x - x.mean())
Out[4]:
0   -0.5
1   -0.5
2    0.5
3    0.5
Name: C, dtype: float64
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用多列生成新列,则无法将其直接分配给新列。所以这不起作用:

 df.assign(D=df.groupby('B').apply(lambda x: x.A - x.C.mean()))
Run Code Online (Sandbox Code Playgroud)

回来

TypeError: incompatible index of inserted column with frame index
Run Code Online (Sandbox Code Playgroud)

事实上, groupby-apply 返回:

In [8]: df.groupby('B').apply(lambda x: x.A - x.C.mean())
Out[8]:
B
A  0    0.5
   2    2.5
B  1    1.5
   3    3.5
Name: …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-apply pandas-groupby

4
推荐指数
2
解决办法
5526
查看次数

标签 统计

pandas ×1

pandas-apply ×1

pandas-groupby ×1

python ×1