尝试分组汇总熊猫中的多行时缺少列

时间:2019-07-09 20:04:52

标签: python pandas

我有一个包含相关信息的数据框,我想对一列(例如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

,但我其余的所有列也进行了类似的分组。现在,我其余的列只是没有出现在我的输出数据集中。不知道出了什么问题。谢谢!

1 个答案:

答案 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