Я думаю, что нужно GroupBy.transform
для join
редактировать значения для нового столбца как string
s:
df['col 5'] = (df.groupby(['col 1','col 2','col 3'])['col 4']
.transform(lambda x: ','.join(x.astype(str))))
print (df)
col 1 col 2 col 3 col 4 col 5
0 A B C 25 25,22,23,45
1 A B C 22 25,22,23,45
2 A B C 23 25,22,23,45
3 A B C 45 25,22,23,45
4 P Q R 9 9,109,20
5 P Q R 109 9,109,20
6 P Q R 20 9,109,20
При необходимости list
s использовать join
:
df = df.join(df.groupby(['col 1','col 2','col 3'])['col 4']
.apply(list).rename('col 5'), on=['col 1','col 2','col 3'])
print (df)
col 1 col 2 col 3 col 4 col 5
0 A B C 25 [25, 22, 23, 45]
1 A B C 22 [25, 22, 23, 45]
2 A B C 23 [25, 22, 23, 45]
3 A B C 45 [25, 22, 23, 45]
4 P Q R 9 [9, 109, 20]
5 P Q R 109 [9, 109, 20]
6 P Q R 20 [9, 109, 20]