gpt4 book ai didi

python - 在 Pandas 的数据框中聚合列表

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

df = pd.DataFrame({'A':[1,1,1,1,2,2,2,2], 'B':['x','x','y','y','x','x','y','y'], 'C':[[1,2,3,4],[5,6],[8,9,10,11],[12,13,14],[15],[16,17,18],[],[19]]})

我正在尝试聚合 C 所以我尝试了

df.groupby('A')['C'].agg(['mean','std'])

但是我得到一个错误

DataError: No numeric types to aggregate

最佳答案

可能可以通过在lambda 函数中使用一些技巧来做到这一点。但是,为了理智和性能起见,我建议在执行此类操作之前先展平数据。


首先,展平你的列:

cols = df.columns.difference(['C'])

df_new = pd.DataFrame(
df[cols].values.repeat(df.C.str.len(), axis=0), columns=cols
)
df_new['C'] = np.concatenate(df['C'])

df_new.head(10)

A B C
0 1 x 1.0
1 1 x 2.0
2 1 x 3.0
3 1 x 4.0
4 1 x 5.0
5 1 x 6.0
6 1 y 8.0
7 1 y 9.0
8 1 y 10.0
9 1 y 11.0

现在,调用groupby:

df_new.groupby('A')['C'].agg(['mean','std'])

mean std
A
1 7.538462 4.351540
2 17.000000 1.581139

将此与凌乱的替代方案进行比较:

fncs = [
('mean', lambda x: np.concatenate(x.values).mean()),
('std', lambda x: np.std(np.concatenate(x.values)))
]
df.groupby('A').C.agg(fncs)

mean std
A
1 7.538462 4.180824
2 17.000000 1.414214

关于python - 在 Pandas 的数据框中聚合列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500114/

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