python - 按列分组并为 group by 中使用的特定列分配不同的聚合函数

标签 python pandas dataframe numpy pandas-groupby

我有一个df:

field           category            2022-01-10      2022-01-17      2022-01-24    2022-01-31 
A               Chair               50              100             200           150
B               Chair               75              15              57            75   
C               Chair               0.57            0.64            0.4           0.47
A               Table               50              100             200           150
B               Table               75              15              57            75   
C               Table               0.57            0.64            0.4           0.47
A               Mirror              50              100             200           150
B               Mirror              75              15              57            75   
C               Mirror              0.57            0.64            0.4           0.47

我尝试按字段进行分组,或者简单地删除category列并聚合每周的值,以便结果如下所示:

field       2022-01-10      2022-01-17      2022-01-24    2022-01-31 
A           50+50+50        100+100+100     200+200+200   150+150+150
B           75+75+75        15+15+15        57+57+57      75+75+75
C           np.mean([0.57, 0.57, 0.57])     # each weeks average of field C

对于字段 A 和 B,每周我都会汇总该周不同类别的值,但对于字段 C,我想要平均值。

我尝试过: df.groupby(['field']).agg({'A':sum, 'B':sum, 'C'.np.mean}) 但这当然不起作用,因为字段是分组依据,而不是列。

我相信这个问题可以通过某种方式删除category列,然后根据field列转换值来解决,但我不确定这是如何工作的。

最佳答案

创建要应用的函数字典,然后平整数据框并按字段变量(日期)列进行分组。使用groupby的第一个索引来获取正确的函数。最后 reshape 你的数据框。

aggfuncs = {'A': lambda x: np.sum(x),
            'B': lambda x: np.sum(x),
            'C': lambda x: np.mean(x)}

out = df.melt(['field', 'category']).groupby(['field', 'variable'])['value'] \
        .apply(lambda x: aggfuncs[x.name[0]](x)).unstack() \
        .rename_axis(columns=None).reset_index()
print(out)

# Output
  field  2022-01-10  2022-01-17  2022-01-24  2022-01-31
0     A      150.00      300.00       600.0      450.00
1     B      225.00       45.00       171.0      225.00
2     C        0.57        0.64         0.4        0.47

关于python - 按列分组并为 group by 中使用的特定列分配不同的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71237703/

相关文章:

python - 通过 Azure DevOps Python API 创建 VSTS PBI

python - Python Requests 包中的 URI 编码

python - 如何在 python 中处理 hackerrank 上的长字符串

python - 如何使用 FFT 从图像中删除重复模式

Python pandas - 分割存储列表而不是单个值的行

r - 在连续组上多次使用 setdiff() 而不使用 for 循环

python - 删除 pandas dataframe 中具有 N 个或多个连续 NaN 的所有行

pandas - 如何将非零填充的日期字符串转换为 pandas 中的有用日期

python - 从与索引对齐的两个 pandas 系列中获取非空字符串值的有效方法

python - 如何将格式应用于 groupby 函数?