首页 > 解决方案 > 计算评论和回复之间的时间差(ChildID、ParentID)

问题描述

我尝试dataframes用相同的ID(MainIDParentID) 计算两者之间的时间差,以考虑评论和响应之间的联系。因此,一个dataframe由带有相应时间戳和 a 的注释组成,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  ...           ...                   ...                   ...

标签: pythonpython-3.xpandasdatetimedataframe

解决方案


这是解决此问题的一种方法。

确保您的“已发布”列属于类型datetime

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

在其对应的键上合并 2 个 DataFrame

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


推荐阅读