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

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

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

userid  name1  name2  ... name10

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

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

【问题讨论】:

    标签: python-3.x pandas group-by pandas-groupby


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 2022-06-22
      • 2019-07-01
      • 1970-01-01
      • 2021-10-28
      • 2022-12-16
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      相关资源
      最近更新 更多