在熊猫中分组,转置和附加?

Posted

技术标签:

【中文标题】在熊猫中分组,转置和附加?【英文标题】:Groupby, transpose and append in Pandas? 【发布时间】:2016-11-17 02:07:50 【问题描述】:

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

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

userid  name1  name2  ... name10

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

那么,它是如何做到的呢?有什么办法可以在 Pandas 中做到这一点?

【问题讨论】:

【参考方案1】:

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

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

演示

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()

【讨论】:

您先生,是我的英雄。也感谢您的解释:) 可能包含如何折叠多余的userid 行?我隐约记得有办法做到这一点。 (不记得很遗憾:()【参考方案2】:

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

【讨论】:

以上是关于在熊猫中分组,转置和附加?的主要内容,如果未能解决你的问题,请参考以下文章

转置和聚合Oracle列数据

在熊猫中按周分组

使用 Power Query 对数据进行分组和转置

如何按多列分组以在熊猫数据框中列出

在 MATLAB 中,为啥我不能组合转置和冒号运算符? [复制]

我如何在熊猫中分组然后对值求和? [复制]