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
我不知道该怎么做,我已经尝试了其他几个代码,但对我不起作用。请帮助解决这个问题。
如果您想要一个逗号分隔的值列表,您可以使用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