计算每个不同值的百分比

时间:2017-12-13 06:40:42

标签: pandas

我有一个数据框,如下所示:

 cust_id            state           city     buy_times

 1. 123             delhi           xyz           2

 2. 234             haryana         ggm           4
 3. 345             delhi           abc           7
 4. 456             AP              asd           3

等等。

我需要计算每个城市和州的销售百分比。

df = data.groupby(['state','city'])['buy_times].sum()

使用此命令,我获得了每个城市和州的销售总数。但我无法计算出相同的百分比。

1 个答案:

答案 0 :(得分:0)

如果需要新的原始列df列,我认为您需要transform

print (data)
   cust_id    state city  buy_times
0      123    delhi  xyz          2
1      345    delhi  abc          7
2      234  haryana  ggm          4
3      345    delhi  xyz          7
4      456       AP  asd          3

sum1 = data.groupby(['state','city'])['buy_times'].transform('sum')
data['new'] = data['buy_times'].div(sum1)
print (data)
   cust_id    state city  buy_times       new
0      123    delhi  xyz          2  0.222222
1      345    delhi  abc          7  1.000000
2      234  haryana  ggm          4  1.000000
3      345    delhi  xyz          7  0.777778
4      456       AP  asd          3  1.000000

如果需要总值的百分比:

df1 = data.groupby(['state','city'])['buy_times'].sum()
df = df1.div(df1.groupby('state').transform('sum')).reset_index(name='perc')
print (df)
     state city    perc
0       AP  asd  1.0000
1    delhi  abc  0.4375
2    delhi  xyz  0.5625
3  haryana  ggm  1.0000