группировать строки на основе совпадения значений столбцов - PullRequest
0 голосов
/ 15 мая 2018

У меня есть df, как это. Я хочу сгруппировать строки значений идентификатора и времени совпадений. Я пытался сгруппировать, но не смог.

 >>> df
       number title   id       time
    0      10    aa  100  02.05.2018  04
    1      11    bb  100  02.05.2018  04

желаемый вывод

>>> df
       number   title   id     time
0      10 11    aa bb  100  02.05.2018  04

Пожалуйста, помогите в решении этой проблемы.

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Если случайно вы искали списки

df.set_index(['id', 'time']).groupby(level=[0, 1]).apply(
    lambda d: pd.Series(d.to_dict('l'))
).reset_index()

    id           time    number     title
0  100  02.05.2018 04  [10, 11]  [aa, bb]
0 голосов
/ 15 мая 2018

Нужно DataFrameGroupBy.agg с join и astype для преобразования числовых столбцов:

df = df.groupby(['id','time'], as_index=False).agg(lambda x: ' '.join(x.astype(str)))
print (df)

    id            time  number  title
0  100  02.05.2018  04   10 11  aa bb

Или преобразовать все столбцы без группировки в str сначала:

df[df.columns.difference(['id','time'])]=df[df.columns.difference(['id','time'])].astype(str)
df = df.groupby(['id','time'], as_index=False).agg(' '.join)
print (df)

    id            time  number  title
0  100  02.05.2018  04   10 11  aa bb

Если не конвертировать, все числовые столбцы отбрасываются без вывода:

df = df.groupby(['id','time'], as_index=False).agg(' '.join)
print (df)

    id            time  title
0  100  02.05.2018  04  aa bb

А при необходимости фильтруются только некоторые столбцы:

cols = ['number']
df = df.groupby(['id','time'], as_index=False)[cols].agg(lambda x: ' '.join(x.astype(str)))
print (df)

    id            time number
0  100  02.05.2018  04  10 11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...