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

标签 python list pandas dataframe aggregate

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/

相关文章:

python - 为单个系列 pandas 堆叠条形图

python - 在未捕获数据的情况下,将值为 0 的周添加到包含时间序列数据的 pandas 数据框中

python-2.7 - Pandas 掉落重复;值倒序

python - 按编号输出特定行

c++ - leveldb 中的整数值

Java 排序 map 或列表

c++ - 传递参数、列表和复制构造函数 C++

python - 编译后的 py2exe 应用程序 selenium 中缺少文件

python - PyQt:获取调用特定功能的按钮

c# - 如何从 2 个单独的文本文件创建组合列表?