使用序列加入熊猫

时间:2020-05-11 22:32:22

标签: python pandas

我正在尝试将两个Pandas数据框连接在一起,部分使用相对顺序。想法是在接收到的表中获取字母#。

import pandas as pd

sntlist = [{'Link ID': 1, 'Sent date': '2020-01-01', 'Letter #': 1},
          {'Link ID': 1,  'Sent date': '2020-01-02',  'Letter #': 2}, 
          {'Link ID': 1,  'Sent date': '2020-01-03',  'Letter #': 3}, 
          {'Link ID': 1,  'Sent date': '2020-01-15',  'Letter #': 4}, 
          {'Link ID': 1,  'Sent date': '2020-01-20',  'Letter #': 5}, 
          {'Link ID': 2,  'Sent date': '2020-01-01',  'Letter #': 10}]
df_snt = pd.DataFrame(sntlist)
df_snt['Sent date'] = pd.to_datetime(df_snt['Sent date'])

reclist = [{'Link ID': 1,  'Receive Date': '2020-01-02'},
           {'Link ID': 1,  'Receive Date': '2020-01-04'}, 
           {'Link ID': 1,  'Receive Date': '2020-01-17'}, 
           {'Link ID': 1,  'Receive Date': '2020-01-18'}, 
           {'Link ID': 2,  'Receive Date': '2020-01-02'}]
df_rec = pd.DataFrame(reclist)
df_rec['Receive Date'] = pd.to_datetime(df_rec['Receive Date'])

我正在尝试将已发送表中的字母#与接收表相关联。

我可以保证-

  • 两者之间的链接ID相同。
  • 信件总是在寄出后才收到(永远不会在同一天)
  • 信件永远不会乱序到达。 (您将永远不会在收到字母2之前收到字母3,但是有可能会收到字母3,而永远不会收到字母2。)
  • 所有信件将在寄出后一周内到达。
  • 如果多个发送的信件是与收据关联的候选者,请选择发送和接收日期之间的差异最小的信件。

我不能保证-

  • 并非所有发送的字母都显示在接收的数据中,反之亦然。

听起来好像merge_ordered可能对我有帮助,但是我并不十分熟悉。

预期输出-

{'Letter #': 1, 'Receive Date': '2020-01-02,
'Letter #': 2, 'Receive Date':  None,
'Letter #': 3, 'Receive Date': '2020-01-04',
'Letter #': 4, 'Receive Date': '2020-01-17',
'Letter #': 5, 'Receive Date': None,
'Letter #': 10, 'Receive Date': '2020-01-02'}

0 个答案:

没有答案