У меня проблемы с преобразованием примера кода R в мой сценарий, и мне было интересно, как этого добиться.
product_df <- example_df[,paste(name, collapse="_"),by=product_id]
Я нашел этот фрагмент кода в предыдущем вопросе SO, но он просто объединял все вместе, а не по определенному идентификатору.
import functools
def reduce_concat(x, sep=""):
return functools.reduce(lambda x, y: str(x) + sep + str(y), x)
def paste(*lists, sep=" ", collapse=None):
result = map(lambda x: reduce_concat(x, sep=sep), zip(*lists))
if collapse is not None:
return reduce_concat(result, sep=collapse)
return list(result)
Вот код для создания оригинального кадра данных ниже
example_df = pd.DataFrame({'product_id': ['100_1244', '100_1244', '100_1244', '100_1244', '200_1244', '200_1244', '200_1244', '200_1244'],
'name': ['apple', 'apple', 'apple', 'apple', 'orange', 'orange', 'orange', 'orange']})
product_id name
0 100_1244 apple
1 100_1244 apple
2 100_1244 apple
3 100_1244 apple
4 200_1244 orange
5 200_1244 orange
6 200_1244 orange
7 200_1244 orange
И я хочу, чтобы это выглядело так:
product_id name
0 100_1244 apple_apple_apple_apple
1 200_1244 orange_orange_orange_orange