从具有相同 ID 的行创建列
Posted
技术标签:
【中文标题】从具有相同 ID 的行创建列【英文标题】:Create columns from row with same 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
谢谢。
【问题讨论】:
【参考方案1】:您可以创建MultiIndex
用于cumcount
重复的计数Id
,然后可以通过unstack
重塑,最后通过add_prefix
和reset_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']
,但每一行需要与数据样本中相同的值。以上是关于从具有相同 ID 的行创建列的主要内容,如果未能解决你的问题,请参考以下文章
Arrayformula - 从具有相同键 ID 的行中收集所有文本
获取具有 stdClass 对象列的行并求和具有相同 id 的元素