Python分组转置

2024-05-13 12:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我把我的数据放在一个数据框里

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

谢谢你的帮助


Tags: 数据storename名称outamountmark花费
1条回答
网友
1楼 · 发布于 2024-05-13 12:17:47

您需要^{}

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

相关问题 更多 >