Вот один из способов использования groupby
+ transform
с пользовательской функцией:
def stringer(x):
return '('+', '.join(map(str, x))+')'
df['Name'] += df.groupby('Name')['Batch'].transform(stringer)
print(df)
Batch Name
0 1 Jon(1, 4)
1 2 Adam(2)
2 3 Voges(3)
3 4 Jon(1, 4)
Обновление учета пустых строк
Вы можете использовать numpy.where
в этом случае:
import numpy as np
def stringer(x):
return '('+', '.join(map(str, map(int, x)))+')'
s = df.dropna(subset=['Name']).groupby('Name')['Batch'].apply(stringer)
df['Name/Batch'] = np.where(df['Name'].notnull(),
df['Name'] + df['Name'].map(s),
df['Name'])
print(df)
Index Batch Name Name/Batch
0 0 1.0 Jon Jon(1, 4)
1 1 NaN NaN NaN
2 2 2.0 Adam Adam(2)
3 3 NaN NaN NaN
4 4 3.0 Voges Voges(3)
5 5 NaN NaN NaN
6 6 4.0 Jon Jon(1, 4)