Python 基于中的最新日期合并
我想用另一个数据帧“确认”左连接数据帧“原始” 未加工的Python 基于中的最新日期合并,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我想用另一个数据帧“确认”左连接数据帧“原始” 未加工的 LogId 1233 1234 1235 承认 LogId Reason Time 1233 Valid 13/09/20 09:45:19 1233 Not Valid 13/09/20 17:23:20 1234 Not Valid 25/09/20 14:56:34 1234 Valid 21/09/20 12:23:12 我的代码: pd.merge(raw
LogId
1233
1234
1235
承认
LogId Reason Time
1233 Valid 13/09/20 09:45:19
1233 Not Valid 13/09/20 17:23:20
1234 Not Valid 25/09/20 14:56:34
1234 Valid 21/09/20 12:23:12
我的代码:
pd.merge(raw,acknowledgement,on='Log Id',how='left')
现在,当我在“logid”上执行左连接时,值被复制
所需的输出应仅包含该特定“日志Id”的最近几天备注
LogId Reason Time
1233 Not Valid 13/09/20 17:23:20
1234 Not Valid 25/09/20 14:56:34
1235 #N/A #N/A
让我们尝试
groupby
+idxmax
以获取每个LogId
的Time
最大值的索引,然后使用这些索引过滤数据帧,然后将其与raw
左合并:
ack = acknowledgement.loc[acknowledgement.groupby('LogId')['Time'].idxmax()]
raw.merge(ack, on='LogId', how='left')
或者,您也可以尝试:
m = acknowledgement.sort_values('Time').duplicated('LogId', keep='last')
raw.merge(acknowledgement[~m], on='LogId', how='left')
正如@nycorder所指出的,这几乎是一个重复。在
确认上删除重复项
然后合并。我的意见是它是重复的,因为合并解决方案有问题,只需要ack=acknowledge.loc[acknowledge.groupby('LogId')['Time']].idxmax()]
,但可能我错了。评论不用于扩展讨论;这段对话已经结束。
LogId Reason Time
0 1233 Not Valid 2020-09-13 17:23:20
1 1234 Not Valid 2020-09-25 14:56:34
2 1235 NaN NaT