不确定如何根据条件合并数据

时间:2018-07-24 21:45:30

标签: python pandas dataframe merge

df1:

HttpResponseRedirect

df2:

tID  sID  dID  date1 date2
1234 4321 5432 7/12  8/13
7890 5688 4567 8/21  9/30

在以下情况下,我想将sID dID date3 4321 5432 7/20 5688 4567 9/15 附加到tID

  • df2date3date1之间
  • date2相同
  • sID相同

df3:

dID

我的第一个想法是遍历两个数据框并使用tID sID dID date3 1234 4321 5432 7/20 7890 5688 4567 9/15 语句,但这似乎并不是一种有效的方法。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

IIUC,首先将它们设置为相同的索引(与str相同,如果ID在编辑之前可能包含诸如8/21之类的ID。如果所有ID均为整数,则无需执行{{ 1}}个步骤)

astype

然后使用df['sID'] = df.sID.astype(str) df['dID'] = df.dID.astype(str) df = df.set_index(['sID', 'dID']) df2['sID'] = df2.sID.astype(str) df2['dID'] = df2.dID.astype(str) df2 = df2.set_index(['sID', 'dID'])

进行过滤和分配
loc

输出

m = df2.index.isin(df.index)
sub = df.loc[df2[m].date3.index]
s = df2[m].date3.between(sub.date1, sub.date2)
df2.loc[:, 'tID'] = df.loc[s[s].index, 'tID']

答案 1 :(得分:2)

df3 = pd.merge(df1, df2, on=['sID', 'dID'])
print df3[df3.date3.between(df3.date1, df3.date2)].drop(['date1', 'date2'], axis=1)

    tID   sID   dID date3
0  1234  4321  5432  7/20
1  7890  5688  4567  9/15

感谢@RafaelC的between想法。