Как добавить все элементы с одинаковым идентификатором в строку данных pandas? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть приведенный ниже кадр данных панд, и я хотел бы преобразовать его в последовательность элементов в один столбец без потери временного порядка столбцов id и fruit.

id   fruit
---|------
101  apple
102  apple
101  watermelon
101  orange
102  orange
104  lemon
105  lemon
104  lemon
105  apple
103  grapes

Например, новый фрейм данных должен выглядеть следующим образом (*):

id               col
101  apple, watermelon, orange
102  apple, orange
103  grapes
104  lemon, lemon
105  apple

Я пытался:

f = {'url' : lambda x: np.unique(x).tolist()}
df = df.groupby('id', as_index=False).agg(f).reindex(columns=df.columns)


def foo(row):
    #just to remove the brackets
    return ', '.join(row)

df4['url'] = df4['fruit'].apply(tweak)
df4

Однако, хотя это работает, когда я делаю:

list(df.loc[[362]]['fruit'])

Собранная информация в каждой строке не сортируется по времени (в соответствии с порядком появления в столбце fruit).Таким образом, как я могу получить (*)?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

apply join с set

df.groupby('id').fruit.apply(lambda x : ','.join(set(x))).reset_index()
Out[82]: 
    id                    fruit
0  101  apple,watermelon,orange
1  102             apple,orange
2  103                   grapes
3  104                    lemon
4  105              apple,lemon
0 голосов
/ 02 июня 2018

Вам понадобится groupby + unique, затем agg.

df.groupby('id').fruit.unique().agg(', '.join).reset_index()

    id                      fruit
0  101  apple, watermelon, orange
1  102              apple, orange
2  103                     grapes
3  104                      lemon
4  105               lemon, apple

Обратите внимание, что данные в группах не переупорядочиваются, даже если группы есть.Если вы не хотите сортировать группы, используйте sort=False.

df.groupby('id', sort=False).fruit.unique().agg(', '.join).reset_index()

    id                      fruit
0  101  apple, watermelon, orange
1  102              apple, orange
2  104                      lemon
3  105               lemon, apple
4  103                     grapes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...