如何在熊猫中汇总总和,并将唯一的行值转换为列名?

时间:2020-10-03 15:18:30

标签: python pandas pandas-groupby

我对熊猫pd.groupby()函数有疑问。我有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'},
       ]

Look like this)

我想将Measure的类别移动到列中,并使它看起来像这样:

Want to be like this

我尝试运行data.groupby(['Measure'], axis = 1).sum(),但对我来说根本不起作用。

1 个答案:

答案 0 :(得分:1)

  • 使用.groupby,然后使用.unstack正确的级别。
    • 在这种情况下,level=2'Measure'对象的.groupby列。
  • .reset_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