[英]How can calculate the sum of a column (but taking specific rows of it) in python using csv file?
[英]How to sum by agrouping a specific column using Python?
我无法按每个组/列求和。 这个想法是在这个数据集上创建一个新列,其中“存储”的总和:
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。
正如@sammywemmy 提到的,您需要在store
上分组,而不是在ForecastSUM
上:
store_groupby = df.groupby(['store']).agg({'ForecastSUM': "sum"})
但是,由于它是长度为6
的 groupby ,因此您不能将其分配回 dataframe 作为新列。
我要做的是将 groupby 转换为字典,然后将其assign()
到具有 lambda function 的新列。
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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.