我尝试计算两个具有相同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 ... ... ... ...
答案 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
参数