Groupby,转置和追加 Pandas?

Groupby, transpose and append in Pandas?

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

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

userid  name1  name2  ... name10

这意味着我需要反转列 name 的每 10 条记录并附加到新的数据框。

那么,它是怎么做到的呢?有什么办法可以在 Pandas 中完成吗?

groupby('userid') 然后在每个组内 reset_index 以一致地跨组枚举。然后 unstack 获取列。

df.groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()

示范[​​=28=]
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()

如果您不想将 userid 作为索引,请在末尾添加 reset_index

df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack().reset_index()

您可能还对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    

使用df.pivot

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