如何从pandas dataframe中按column_1分组计算column_2的数值小计
问题原因
pandas.crosstab 默认统计两个字段交叉的出现频次,你之前的写法没有指定聚合的数值列和聚合规则,所以输出的是每个column_1值对应不同column_2值的出现次数,行合计自然就是计数的总和,不是数值求和结果。
调整后的crosstab写法
只需要补充两个参数即可:
values:指定要聚合计算的列,也就是你要求和的column_2aggfunc:指定聚合规则,这里填sum代表求和
示例代码如下:
pd.crosstab( index=df["column_1"], columns="sum_column", values=df["column_2"], aggfunc="sum", margins=True, margins_name="总合计" )
输出结果(对应你的示例数据)
| column_1 | sum_column |
|---|---|
| A | -156 |
| B | 171 |
| C | 4 |
| D | -52 |
| 总合计 | -33 |
补充说明
如果你只需要拿到每个分组的求和结果不需要生成交叉表,用groupby写法更简洁:
df.groupby("column_1")["column_2"].sum()
内容的提问来源于stack exchange,提问作者Ziv
相关产品推荐
相关产品推荐

