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
:
df2
在date3
和date1
之间date2
相同sID
相同df3:
dID
我的第一个想法是遍历两个数据框并使用tID sID dID date3
1234 4321 5432 7/20
7890 5688 4567 9/15
语句,但这似乎并不是一种有效的方法。
任何帮助将不胜感激。
答案 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
想法。