Вычислить разницу во времени между комментариями и ответами (ChildID, ParentID) - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь вычислить разницу во времени между двумя dataframes с одинаковыми ID (MainID и ParentID), чтобы учесть связь между комментарием и ответом.Таким образом, один dataframe состоит из комментариев с соответствующими метками времени, а MainID, а другой dataframe состоит из ответов с метками времени и ParentID, который идентичен MainID.Однако в моей записи возможно, что уникальный комментарий может содержать несколько ответов.Поэтому моя цель - вычислить разницу ПЕРВОГО (или ПОСЛЕДНЕГО) ответа и записать его обратно в dataframe.Однако я понятия не имею, как это реализовать, и моя функция, похоже, тоже не работает.

for i in Comments['MainID']:
    commentID = i
    for j in Replies['ParentID']:
        parentID = j
        if commentID == parentID:
            Comments['new'] == Comments['publishedAt'] - Replies['publishedAt']


Comment

   MainID      Message   Published
1  terssfd32   ...       2018-06-25 23:00:00
2  hetasfd2s   ...       2018-06-25 23:10:00
3  eeasdfr3d   ...       2018-06-25 23:20:00
4  ...         ...       ...

Replies

   ChildID    ParentID    Message   Published
1  1a         terssfd32   ...       2018-06-25 23:00:40  
2  2a         terssfd32   ...       2018-06-25 23:05:08
3  3a         hetasfd2s   ...       2018-06-25 23:11:40
4  4a         hetasfd2s   ...       2018-06-25 23:14:30
5  5a         hetasfd2s   ...       2018-06-25 23:16:10
6  6a         eeasdfr3d   ...       2018-06-25 23:22:08


Goal

   MainID        Published             PublishedReply        Diff
1  terssfd32     2018-06-25 23:00:00   2018-06-25 23:00:40   40sec
2  hetasfd2s     2018-06-25 23:10:00   2018-06-25 23:11:40   100sec
3  eeasdfr3d     2018-06-25 23:20:00   2018-06-25 23:22:08   128sec
4  ...           ...                   ...                   ...

1 Ответ

1 голос
/ 03 апреля 2019

Вот один из подходов к этому.

Убедитесь, что столбцы 'Опубликованные' имеют тип datetime

Comment['Published'] = pd.to_datetime(Comment['Published'])
Replies['Published'] = pd.to_datetime(Replies['Published'])

Объединить 2 кадра данных на соответствующие им ключи

df_new = (Comment[['MainID', 'Published']]
          .merge(Replies[['ParentID', 'Published']],
                 left_on='MainID',
                 right_on='ParentID',
                 suffixes=('_comment', '_reply'))
          .drop('ParentID', axis=1))

Добавить вычисленный Diff столбец

df_new['Diff'] = (df_new['Published_reply'] - df_new['Published_comment']).dt.total_seconds()

Сортировка DataFrame по Diff и удаление дубликатов. Это сохранит «первый» комментарий.

df_new = df_new.sort_values('Diff').drop_duplicates('MainID')

print(df_new)

      MainID   Published_comment     Published_reply   Diff
0  terssfd32 2018-06-25 23:00:00 2018-06-25 23:00:40   40.0
2  hetasfd2s 2018-06-25 23:10:00 2018-06-25 23:11:40  100.0
5  eeasdfr3d 2018-06-25 23:20:00 2018-06-25 23:22:08  128.0

Если вам требуется последний комментарий, добавьте аргумент ascending=False к методу sort_values

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...