python 如何使用按Pandas分组按列转置表[duplicate]

oo7oh9g9  于 2023-01-16  发布在  Python
关注(0)|答案(3)|浏览(121)
    • 此问题在此处已有答案**:

How can I pivot a dataframe?(5个答案)
2小时前关门了。
我有一个表需要转置,它看起来像这样:

| User ID| Week | clicks | days|
|------- |------| -------|-----|
| x      | 1    | 1      | 1   | 
| x      | 2    | 2      | 3   |
| y      | 1    | 3      | 2   | 
| y      | 2    | 3      | 2   |
| y      | 3    | 4      | 3   |

我需要的输出如下所示:

| User ID| clicks week 1| clicks week 2| clicks week 3| days week 1| days week 2| days week 3|
|--------|--------------| -------------|------------- |------------| -----------|------------|
| x      | 1            | 2            | 0            | 1          | 3          | 0          |
| y      | 3            | 3            | 4            | 2          | 2          | 3          |

对于每个用户,我需要一个单行,对于每个类别,我需要每周一列(如果用户在一周内没有活动,则写0)。
你知道怎么做吗?
谢谢!

vbopmzt1

vbopmzt11#

您可以将.pivot().fillna()一起使用:

df.pivot(index="User ID", columns="Week", values=["clicks", "days"]).fillna(0)

这将输出:

clicks                    days
Week       1        2        3     1     2     3
User ID
x        1        2              0  1     3        0
y        3        3        4        2     2     3
6vl6ewon

6vl6ewon2#

您可以尝试Pandas枢轴法:

testing.pivot(index="User ID",columns=["Week"],values=["clicks","days"]).fillna(0)

         clicks         days
Week    1   2   3   1   2   3
User ID                     
x       1.0 2.0 0.0 1.0 3.0 0.0
y       3.0 3.0 4.0 2.0 2.0 3.0
tpgth1q7

tpgth1q73#

你可以用多种方法来做。no 1.你可以使用.pivot并赋值index='User ID'columns='Week'values=['clicks', "days"]

df.pivot(index='User ID', columns='Week', values=['clicks', "days"])

**no 2.**如果需要聚合,可以使用groupby + unstackgroupby方法用于按列对数据进行分组,unstack用于透视数据。

df.groupby(['User ID', 'Week'], sort=False).sum().unstack()

否3另一种解决方案是使用set_index + unstack

df.set_index(['User ID', 'Week']).unstack()

相关问题