Как вставить (как R) и групповой в Python - PullRequest
0 голосов
/ 08 января 2019

У меня проблемы с преобразованием примера кода 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

Ответы [ 2 ]

0 голосов
/ 08 января 2019

использовать groupby с join

df.groupby('product_id').apply(lambda x: '_'.join(x['name']))

product_id
100_1244        apple_apple_apple_apple
200_1244    orange_orange_orange_orange
0 голосов
/ 08 января 2019

Вы можете проверить с groupby

example_df.groupby('product_id').name.apply('_'.join).reset_index()

  product_id                         name
0   100_1244      apple_apple_apple_apple
1   200_1244  orange_orange_orange_orange
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...