首页 > 解决方案 > 从具有相同 ID 的行创建列

问题描述

我有一个这样的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

谢谢。

标签: pythonpandasbigdata

解决方案


您可以MultiIndex为 count 重复创建,然后可能 reshape by Id,最后通过with 进行一些数据清理:cumcountunstackadd_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           

rename从以下开始的列1

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        

推荐阅读