简体   繁体   中英

How to aggregate sum, and convert unique row values to column names, in pandas?

I have issue with pandas pd.groupby() function. I have DataFrame

data = [{'Shop': 'Venga', 'Item Name': 'Oranges', 'Measure':'Supply Cost', 'Value': '10'},
        {'Shop': 'Venga', 'Item Name': 'Oranges', 'Measure':'Product Cost', 'Value': '20'},
        {'Shop': 'Venga', 'Item Name': 'Apples', 'Measure':'Supply Cost', 'Value': '5'},
        {'Shop': 'Venga', 'Item Name': 'Apples', 'Measure':'Product Cost', 'Value': '60'},
        {'Shop': 'Mesto', 'Item Name': 'Oranges', 'Measure':'Supply Cost', 'Value': '15'},
        {'Shop': 'Mesto', 'Item Name': 'Oranges', 'Measure':'Product Cost', 'Value': '10'},
        {'Shop': 'Mesto', 'Item Name': 'Apples', 'Measure':'Supply Cost', 'Value': '80'},
        {'Shop': 'Mesto', 'Item Name': 'Apples', 'Measure':'Product Cost', 'Value': '5'},
       ]

看起来像这样)

I want to move my categories of Measure to columns and make it look like this:

想要变成这样

I have tried to run data.groupby(['Measure'], axis = 1).sum() but it doesn't work at all for me.

  • Use .groupby and then .unstack the correct level.
    • In this case, level=2 is the 'Measure' column, from the .groupby object.
  • .reset_index to remove the multi-level index.
import pandas as pd

dfg = df.groupby(['Shop', 'Item Name', 'Measure'])['Value'].sum().unstack(level=2).reset_index()
dfg.columns.name = None

# display(dfg)
    Shop Item Name Product Cost Supply Cost
0  Mesto    Apples            5          80
1  Mesto   Oranges           10          15
2  Venga    Apples           60           5
3  Venga   Oranges           20          10

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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