如何通过使用 Python 对特定列进行分组来求和?
Posted
技术标签:
【中文标题】如何通过使用 Python 对特定列进行分组来求和?【英文标题】:How to sum by agrouping a specific column using Python? 【发布时间】:2021-07-01 18:21:07 【问题描述】:我无法按每个组/列求和。我们的想法是在这个数据集上创建一个新列,其中“存储”的总和:
PNO store ForecastSUM
17 20054706 WITZ 0.0
8 8007536 WITZ 0.0
2 8007205 WITZ 0.0
12 8601965 WITZ 0.0
5 8007239 WITZ 0.0
14 20054706 ROT 1.0
1 8007205 ROT 7.0
9 8601965 ROT 2.0
6 8007536 ROT 3.0
3 8007239 ROT 2.0
15 20054706 MAR 1.0
7 8007536 MAEG 6.0
10 8601965 MAEG 4.0
4 8007239 MAEG 3.0
0 8007205 MAEG 6.0
13 20054706 BUD 1.0
11 8601965 AYC 0.0
16 20054706 AYC 0.0
我正在尝试应用此代码:
copiedDataWHSE['sumWHSE'] = copiedDataWHSE.groupby(['ForecastSUM']).agg('ForecastSUM': "sum")
我得到的结果是:
PNO store ForecastSUM sumWHSE
17 20054706 WITZ 0.0 NaN
8 8007536 WITZ 0.0 NaN
2 8007205 WITZ 0.0 4.0
12 8601965 WITZ 0.0 NaN
5 8007239 WITZ 0.0 NaN
14 20054706 ROT 1.0 NaN
1 8007205 ROT 7.0 3.0
9 8601965 ROT 2.0 NaN
6 8007536 ROT 3.0 12.0
3 8007239 ROT 2.0 6.0
15 20054706 MAR 1.0 NaN
7 8007536 MAEG 6.0 7.0
10 8601965 MAEG 4.0 NaN
4 8007239 MAEG 3.0 4.0
0 8007205 MAEG 6.0 0.0
13 20054706 BUD 1.0 NaN
11 8601965 AYC 0.0 NaN
16 20054706 AYC 0.0 NaN
这是错误的,因为我想举个例子,一旦商店 ROT,sumWHSE 列应该收到 19。
【问题讨论】:
如果要在 ForecastSum 上进行聚合,为什么要对其进行分组? 【参考方案1】:正如@sammywemmy 所说,您需要在store
上进行分组,而不是在ForecastSUM
上:
store_groupby = df.groupby(['store']).agg('ForecastSUM': "sum")
但是,由于它是长度为 6
的 groupby,因此您不能将其作为新列分配回数据帧。
我要做的是将 groupby 转换为字典,然后将 assign()
转换为带有 lambda 函数的新列。
store_groupby_dict = store_groupby.to_dict()
df = df.assign(store_total = lambda x: store_groupby_dict[x.store])
用apply()
做同样的事情使它更具可读性:
df['store_total'] = df.store.apply(lambda x: store_groupby_dict[x])
【讨论】:
一旦我应用了 df['store_total'] = df.store.apply(lambda x: store_groupby_dict[x]),就会发生以下错误: KeyError Traceback (最近一次调用最后一次)以上是关于如何通过使用 Python 对特定列进行分组来求和?的主要内容,如果未能解决你的问题,请参考以下文章