Как сгруппировать текст в одну строку и рассчитать продолжительность времени в питон-пандах? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть такой фрейм данных,

ID    time       text
1   8:43:43 PM   one day
1   8:43:51 PM   this code
1   8:44:07 PM   will help
1   8:44:17 PM   someone.
2   8:45:56 AM   yes
2   8:46:09 AM   I'm feeling
2   8:46:25 AM   good.

Я хочу сгруппировать столбец времени по идентификатору и рассчитать продолжительность. Я знаю, что мы можем использовать join для объединения текста и группировки по каждому идентификатору.

Окончательный результат будет

ID   time-duration    text
1    34        one day this code will help someone.
2    29        yes I'm feeling good.

Ответы [ 3 ]

3 голосов
/ 05 ноября 2019

Мы можем сделать

df.groupby('ID').agg({'time':np.ptp,'text':' '.join})
Out[49]:  
       time                                  text
ID                                               
1  00:00:34  one day this code will help someone.
2  00:00:29                 yes I'm feeling good.
3 голосов
/ 05 ноября 2019

Группировка и агрегация:

(df.groupby('ID', as_index=False)
   .agg({'time': lambda x: (x.max() - x.min()).total_seconds(),
         'text': ' '.join})
)

Выход:

   ID  time                                  text
0   1  34.0  one day this code will help someone.
1   2  29.0                 yes I'm feeling good.
3 голосов
/ 05 ноября 2019

Использование GroupBy.agg с named aggregations (лучшая практика с pandas >= 0.25.0)

Преимущество именованных агрегаций состоит в том, что мы агрегируем и одновременнопереименуйте наш столбец, см. time_duration в выводе.

df['time'] = pd.to_datetime(df['time'])

dfg = df.groupby('ID').agg(
    time_duration=('time', lambda x: x.max()-x.min()),
    text=('text', ' '.join)
).reset_index()
   ID time_duration                                  text
0   1      00:00:34  one day this code will help someone.
1   2      00:00:29                 yes I'm feeling good.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...