简体   繁体   English

Pandas groupby 然后pivot 没有返回所需的输出

[英]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.meltDataFrame.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM