【问题标题】:Merge based on latest Date in pandas [duplicate]根据熊猫中的最新日期合并[重复]
【发布时间】:2021-02-10 20:04:48
【问题描述】:

我想将 Dataframe 'Raw' 与另一个 DataFrame 'acknowledgement' 离开连接

原始

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')

现在,当我在“Log Id”上进行左连接时,值会重复。

所需的输出应该只包含该特定“日志 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

【问题讨论】:

  • 正如@NYCCoder 指出的那样,这几乎是一个骗局。将重复项放在acknowledgement 上,然后合并。
  • 我的意见是重复的,因为合并解决方案有问题,只需要ack = acknowledgement.loc[acknowledgement.groupby('LogId')['Time'].idxmax()],但可能我错了

标签: python pandas numpy dataframe


【解决方案1】:

让我们尝试groupby + idxmax 来获取Time 每个LogId 的最大值索引,然后使用这些索引过滤数据框,然后将其与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')

   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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 2016-12-08
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2017-11-03
  • 2020-10-01
  • 1970-01-01
相关资源
最近更新 更多