gpt4 book ai didi

Python:Pandas 错误地排除了 groupby 中的列

转载 作者:太空狗 更新时间:2023-10-30 00:16:03 25 4
gpt4 key购买 nike

我遇到过 Pandas 对干扰列的静默排除,如下所述:Pandas Nuisance columns

它声称如果聚合函数不能应用于列,它会默默地排除列。

考虑以下示例:

我有一个数据框:

df = pd.DataFrame({'C': {0: -0.91985400000000006, 1: -0.042379, 2: 1.2476419999999999, 3: -0.00992, 4: 0.290213, 5: 0.49576700000000001, 6: 0.36294899999999997, 7: 1.548106}, 'A': {0: 'foo', 1: 'bar', 2: 'foo', 3: 'bar', 4: 'foo', 5: 'bar', 6: 'foo', 7: 'foo'}, 'B': {0: -1.131345, 1: -0.089328999999999992, 2: 0.33786300000000002, 3: -0.94586700000000001, 4: -0.93213199999999996, 5: 1.9560299999999999, 6: 0.017587000000000002, 7: -0.016691999999999999}})

df:
A B C
0 foo -1.131345 -0.919854
1 bar -0.089329 -0.042379
2 foo 0.337863 1.247642
3 bar -0.945867 -0.009920
4 foo -0.932132 0.290213
5 bar 1.956030 0.495767
6 foo 0.017587 0.362949
7 foo -0.016692 1.548106

让我合并两列 B 和 C 并转换成一个 numpy ndarray:

df = df.assign(D=df[['B', 'C']].values.tolist())
df['D'] = df['D'].apply(np.array)

df:

A B C D
0 foo -1.131345 -0.919854 [-1.131345, -0.9198540000000001]
1 bar -0.089329 -0.042379 [-0.08932899999999999, -0.042379]
2 foo 0.337863 1.247642 [0.337863, 1.247642]
3 bar -0.945867 -0.009920 [-0.945867, -0.00992]
4 foo -0.932132 0.290213 [-0.932132, 0.290213]
5 bar 1.956030 0.495767 [1.95603, 0.495767]
6 foo 0.017587 0.362949 [0.017587000000000002, 0.36294899999999997]
7 foo -0.016692 1.548106 [-0.016692, 1.548106]

现在我可以对 D 列应用均值:

print(df['D'].mean())
print(df['B'].mean())
print(df['C'].mean())

[-0.10048563 0.3715655 ]
-0.100485625
0.3715655

但是当我尝试按 A 分组并获取平均值时,D 列被删除:

df.groupby('A').mean()

B C
A
bar 0.306945 0.147823
foo -0.344944 0.505811

我的问题是,为什么可以成功应用聚合函数,但 D 列却被排除在外?

另外,当感兴趣的特定列是 numpy 数组时,通常如何使用 mean 或 sum 等聚合函数?

最佳答案

是否可行,但需要在自定义函数中使用if-else:

def f(x):
a = x.mean()
return a if isinstance(a, (float, int)) else list(a)

df = df.groupby('A').agg(f)
print (df)
B C D
A
bar 0.306945 0.147823 [0.306944666667, 0.147822666667]
foo -0.344944 0.505811 [-0.3449438, 0.5058112]

df = df.groupby('A').agg(lambda x: x.mean())
print (df)
B C D
A
bar 0.306945 0.147823 NaN
foo -0.344944 0.505811 NaN

关于Python:Pandas 错误地排除了 groupby 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48922716/

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