提问者:小点点

如何合并熊猫中的重复行[重复]


import pandas as pd
df = pd.DataFrame({'id':['A','A','A','B','B','B','C'],'name':[1,2,3,4,5,6,7]})
print(df.to_string(index=False))

到目前为止,上述代码的输出是:

id  name
 A     1
 A     2
 A     3
 B     4
 B     5
 B     6
 C     7

但我正在消耗它的输出,比如:

id    name
A     1,2,3
B     4,5,6
C     7

我不知道该怎么做,我已经尝试了其他几个代码,但对我不起作用。请帮助解决这个问题。


共2个答案

匿名用户

如果您想要一个逗号分隔的值列表,您可以使用join进行聚合,注意您必须先将值转换为字符串:

df2 = df.groupby('id', as_index=False).agg(lambda x: ','.join(map(str, x)))
print(df2.to_string(index=False))

输出:

id  name
 A 1,2,3
 B 4,5,6
 C     7

如果您只想要一个值列表,请使用list进行聚合:

df2 = df.groupby('id', as_index=False).agg(list)
print(df2.to_string(index=False))

输出:

id      name
 A [1, 2, 3]
 B [4, 5, 6]
 C       [7]

匿名用户

你可以使用groupby()application()reset_index()

df = df.groupby("id")['name'].apply(list).reset_index()

df:

  id       name
0  A  [1, 2, 3]
1  B  [4, 5, 6]
2  C        [7]

此外,如果您希望name列是字符串而不是列表,您可以执行以下操作:

df = df.groupby("id")['name'].apply(list).apply(lambda x: ",".join(str(i) for i in x)).reset_index()

df:

  id   name
0  A  1,2,3
1  B  4,5,6
2  C      7