计算评论和回复之间的时间差(ChildID,ParentID)

时间:2019-04-03 16:21:30

标签: python python-3.x pandas datetime dataframe

我尝试计算两个具有相同dataframesIDMainID)的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 个答案:

答案 0 :(得分:1)

这是一种解决方法。

确保“已发布”列的类型为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()

通过Diff对DataFrame进行排序,并删除重复项。这将保留“第一”评论。

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参数