【问题标题】:Compute the difference of time between Comments and Replies (ChildID, ParentID)计算评论和回复之间的时间差(ChildID、ParentID)
【发布时间】:2019-04-03 16:21:30
【问题描述】:

我尝试计算两个dataframes 与相同IDMainIDParentID)之间的时间差,以考虑评论和响应之间的联系。因此,一个dataframe 由带有各自时间戳的cmets 和一个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  ...           ...                   ...                   ...

【问题讨论】:

  • 你是如何计算 ID terssfd32 的 40 秒的? PublishedReply 列似乎不正确。
  • 加上时间戳是从哪里突然来的?您的示例数据需要正确,我们才能重现。

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


【解决方案1】:

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

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

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 方法

【讨论】:

  • 感谢您的建议,代码完美运行! :)
  • @Daniel 很乐意帮助好友
猜你喜欢
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多