Python分组转置

时间:2017-03-14 12:40:11

标签: python python-3.x pandas

我的数据在pandas数据框中

out[1]:
    NAME     STORE      AMOUNT
0   GARY     GAP          20
1   GARY     GAP          10
2   GARY     KROGER       15
3   ASHLEY   FOREVER21    30
4   ASHLEY   KROGER       10
5   MARK     GAP          10
6   ROGER    KROGER       30

我试图按名称进行分组,总计花费的总金额,同时还为数据框中的每个唯一商店生成列。 期望的:

out[1]:
    NAME      GAP      KROGER     FOREVER21
0   GARY      30        15            0
1   ASHLEY    0         10            30
2   MARK      10        0             0
3   ROGER     0         30            0

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您需要pivot_table

df1 = df.pivot_table(index='NAME', 
                    columns='STORE', 
                    values='AMOUNT', 
                    aggfunc='sum', 
                    fill_value=0)
print (df1)
STORE   FOREVER21  GAP  KROGER
NAME                          
ASHLEY         30    0      10
GARY            0   30      15
MARK            0   10       0
ROGER           0    0      30

groupbysum聚合的替代解决方案:

df1 = df.groupby(['NAME','STORE'])['AMOUNT'].sum().unstack(fill_value=0)
print (df1)
STORE   FOREVER21  GAP  KROGER
NAME                          
ASHLEY         30    0      10
GARY            0   30      15
MARK            0   10       0
ROGER           0    0      30

如果需要来自索引值的列并删除列和索引名称,则为

print (df1.reset_index().rename_axis(None, axis=1).rename_axis(None))
     NAME  FOREVER21  GAP  KROGER
0  ASHLEY         30    0      10
1    GARY          0   30      15
2    MARK          0   10       0
3   ROGER          0    0      30