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
Я не уверен, как это сделать, я пробовал несколько других кодов, но у меня не сработало. Пожалуйста, помогите в решении этого.
Вы можете использовать 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
Если вам нужен список значений, разделенных запятыми, вы можете агрегировать с помощью 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]