Groupby,转置并附加在熊猫?

Daw*_*y33 11 group-by python-3.x pandas pandas-groupby

我有一个如下所示的数据框:

在此输入图像描述

每个用户有10条记录.现在,我想创建一个如下所示的数据框:

userid  name1  name2  ... name10
Run Code Online (Sandbox Code Playgroud)

这意味着我需要反转列的每10个记录name并附加到新的数据帧.

那么,它是如何做到的呢?我有什么方法可以在熊猫中做到吗?

piR*_*red 9

groupby('userid')然后reset_index在每个组内进行一致的枚举.然后unstack获取列.

df.groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()
Run Code Online (Sandbox Code Playgroud)

示范

df = pd.DataFrame([
        [123, 'abc'],
        [123, 'abc'],
        [456, 'def'],
        [123, 'abc'],
        [123, 'abc'],
        [456, 'def'],
        [456, 'def'],
        [456, 'def'],
    ], columns=['userid', 'name'])

df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你不想userid作为索引,添加reset_index到最后.

df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack().reset_index()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Jan*_*azz 5

您可能还对pandas.DataFrame.pivot感兴趣

请参阅此示例数据框:

df
    userid  name  values
0   123     A     1    
1   123     B     2    
2   123     C     3    
3   456     A     4    
4   456     B     5    
5   456     C     6    
Run Code Online (Sandbox Code Playgroud)

使用df.pivot

df.pivot(index='userid', columns='name', values='values')
name  A   B   C
userid
123  1   2   3
456  4   5   6
Run Code Online (Sandbox Code Playgroud)