python 如何在pandas中合并重复行[duplicate]

t30tvxxf  于 2023-04-10  发布在  Python
关注(0)|答案(2)|浏览(179)

此问题已在此处有答案

Concatenate strings from several rows using Pandas groupby(8个回答)
How to group dataframe rows into list in pandas groupby(17回答)
关闭54分钟前.

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

我不知道如何做到这一点,我已经尝试了其他几个代码,但没有为我工作。请帮助解决这个问题。

f0ofjuux

f0ofjuux1#

如果你想要一个逗号分隔的值列表,你可以使用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]
oug3syen

oug3syen2#

可以使用groupby()apply()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列为string而不是list,可以执行以下操作:

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

相关问题