我有一个包含相关信息的数据框,我想对一列(例如ID)进行分组,而其他具有相同ID的列以“ |”连接。但是,当我运行代码时,大多数列最终都会丢失(仅出现前三列),而且我不知道出了什么问题。
我的代码是:
df = df.groupby('id').agg(lambda col: '|'.join(set(col))).reset_index()
例如,我的数据以
开头 id words ... (other columns here)
0 a asd
1 a rtr
2 b s
3 c rrtttt
4 c dsfd
我想要
id ... (other columns here)
a asd|rtr
b s
c rrtttt|dsfd
,但我其余的所有列也进行了类似的分组。现在,我其余的列只是没有出现在我的输出数据集中。不知道出了什么问题。谢谢!
答案 0 :(得分:2)
预先转换为字符串,然后可以在之后使用agg(set)
和applymap
来避免使用lambda:
df.astype(str).groupby('id').agg(set).applymap('|'.join)
最小可验证示例
df = pd.DataFrame({
'id': ['a', 'a', 'b', 'c', 'c'],
'numbers': [1, 2, 2, 3, 3],
'words': ['asd', 'rtr', 's', 'rrtttt', 'dsfd']})
df
id numbers words
0 a 1 asd
1 a 2 rtr
2 b 2 s
3 c 3 rrtttt
4 c 3 dsfd
df.astype(str).groupby('id').agg(set).applymap('|'.join)
numbers words
id
a 1|2 asd|rtr
b 2 s
c 3 rrtttt|dsfd