我有一个数据框df
,例如:
Name Date Item Quantity Unit_Cost Value
0 Alex 2018_Q1 AA 9 8.97 80.73
1 Alex 2018_Q1 BB 3 12.34 37.02
2 Alex 2018_Q1 CC 4 1.40 5.60
3 Alex 2018_Q1 DD 7 0.22 1.54
4 Ray 2018_Q1 AA 8 5.30 42.40
5 Ray 2018_Q1 DD 2 1.60 3.20
6 Ray 2018_Q1 EE 4 8.00 32.00
7 Ray 2018_Q1 FF 9 4.00 36.00
8 Alex 2018_Q2 DD 1 0.45 0.45
9 Alex 2018_Q2 AA 4 7.00 28.00
10 Alex 2018_Q2 EE 2 6.40 12.80
11 Alex 2018_Q2 CC 3 2.30 6.90
12 Ray 2018_Q2 CC 1 9.00 9.00
13 Ray 2018_Q2 DD 4 8.00 32.00
14 Ray 2018_Q2 GG 1 6.50 6.50
15 Ray 2018_Q2 HH 2 9.10 18.20
nd我想计算一个称为% of Total Value
的新列,该列将是:
(给定Value
Date
和Name
的{Item
)/(sum
Values
中Date
}和Name
)。
所以输出看起来像:
Name Date Item Quantity Unit_Cost Value % of Total Value
0 Alex 2018_Q1 AA 9 8.97 80.73 0.646409
1 Alex 2018_Q1 BB 3 12.34 37.02 0.296421
2 Alex 2018_Q1 CC 4 1.40 5.60 0.044839
3 Alex 2018_Q1 DD 7 0.22 1.54 0.012331
4 Ray 2018_Q1 AA 8 5.30 42.40 0.373239
5 Ray 2018_Q1 DD 2 1.60 3.20 0.028169
6 Ray 2018_Q1 EE 4 8.00 32.00 0.281690
7 Ray 2018_Q1 FF 9 4.00 36.00 0.316901
8 Alex 2018_Q2 DD 1 0.45 0.45 0.009346
9 Alex 2018_Q2 AA 4 7.00 28.00 0.581516
10 Alex 2018_Q2 EE 2 6.40 12.80 0.265836
11 Alex 2018_Q2 CC 3 2.30 6.90 0.143302
12 Ray 2018_Q2 CC 1 9.00 9.00 0.136986
13 Ray 2018_Q2 DD 4 8.00 32.00 0.487062
14 Ray 2018_Q2 GG 1 6.50 6.50 0.098935
15 Ray 2018_Q2 HH 2 9.10 18.20 0.277017
我尝试过类似的事情:
quarter_total_value = df.groupby(['Name', 'Date'])['Value'].sum()
df['% of Total Value'] = df['Value']/quarter_total_value
但这给了我一个错误:
ValueError: cannot join with no overlapping index names
那么我如何获得所需的输出?我是否必须遍历df
并编写每个% of Total Value
还是有更简单的方法呢?
答案 0 :(得分:2)
您可以使用transform
quarter_total_value = df.groupby(['Name', 'Date'])['Value'].transform('sum')
df['% of Total Value'] = df['Value']/quarter_total_value