[英]Pandas groupby and then pivot is not returning the desired output
I have a dataframe df
as follows:我有一个数据框df
如下:
CA Amount Payment_Mode Trans
1001 230 Non-Digi Normal
1001 330 Website Normal
1001 40 Website PPI
1002 100 Card PPI
1002 700 Website PPI
1002 100 Card Normal
Now I want a resultant dataframe df_f
as follows where Payment_Mode
count and Trans
count are captured in column wise:现在,我希望有一个结果数据帧df_f
如下,其中Payment_Mode
计数和Trans
计数方向列被捕获:
CA Amount Non-Digi Website Card Normal PPI
1001 600 1 2 0 2 1
1002 900 0 1 2 1 2
My Approach:我的方法:
df_1 = df.groupby(['CA']).agg(Amount = ('Amount','sum'),
Payment_Mode = ('Payment_Mode','count'),
Trans = ('Trans','count')).reset_index()
df_f = df_1.pivot(index='CA', columns = 'Payment_Mode', values = '???') <-- This is where I am stuck
Any clue on this?这有什么线索吗?
Use DataFrame.melt
with DataFrame.pivot_table
first and then add aggregated sum colum:使用DataFrame.melt
与DataFrame.pivot_table
第一,然后添加聚集和科拉姆:
df_1 = (df.groupby('CA').sum()
.join(df.melt(id_vars='CA',value_vars=['Payment_Mode','Trans'])
.pivot_table(index='CA', columns='value', values = 'variable',aggfunc='count', fill_value=0))
.reset_index())
print (df_1)
CA Amount Card Non-Digi Normal PPI Website
0 1001 600 0 1 2 1 2
1 1002 900 2 0 1 2 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.