【问题标题】:Create columns from row with same ID从具有相同 ID 的行创建列
【发布时间】:2019-02-21 08:00:38
【问题描述】:

我有一个这样的 df:

Id      username  age

1       michael.     34
6.      Mike.          65
7.      Stephanie.  14
1.      Mikael.        34
6.      Mick.           65

如您所见,对于相同的 id,用户名的写法不同。我想像这样将所有用户名重新组合到同一行:

Id      username      username_2    Age

1       michael.         mikael.           34
6.      Mike.             Mick.              65
7.      Stephanie.                           14

谢谢。

【问题讨论】:

    标签: python pandas bigdata


    【解决方案1】:

    您可以创建MultiIndex 用于cumcount 重复的计数Id,然后可以通过unstack 重塑,最后通过add_prefixreset_index 进行一些数据清理:

    df1 = (df.set_index(['Id', df.groupby('Id').cumcount()])['username']
             .unstack(fill_value='')
             .add_prefix('username_')
             .reset_index())
    print (df1)
        Id username_0 username_1
    0  1.0    michael     Mikael
    1  6.0       Mike       Mick
    2  7.0  Stephanie           
    

    或从1 开始的rename 列:

    df1 = (df.set_index(['Id', df.groupby('Id').cumcount()])['username']
             .unstack(fill_value='')
             .rename(columns = lambda x: f'username_{x+1}')
             .reset_index())
    print (df1)
        Id username_1 username_2
    0  1.0    michael     Mikael
    1  6.0       Mike       Mick
    2  7.0  Stephanie        
    

    【讨论】:

    • 工作正常!如果不删除我的 df 的所有其他行,你现在是怎么做到这一点的?
    • @YoavTaieb - S 有多个列,例如username,并且需要在输出数据中对它们进行相同的处理,例如列username
    • 是的,但我也想保留我以前的数据来自我的 df。你看我有其他列不需要这个处理,我想保留它们。
    • @YoavTaieb - 你能用预期的输出改变有问题的数据吗?
    • @YoavTaieb - 所以将df.set_index(['Id', df.groupby('Id').cumcount()])['username'] 更改为df.set_index(['Id','age', df.groupby('Id').cumcount()])['username'],但每一行需要与数据样本中相同的值。
    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 2019-09-02
    • 1970-01-01
    • 2017-01-23
    • 2020-12-20
    • 1970-01-01
    • 2018-08-03
    • 2019-10-01
    相关资源
    最近更新 更多