我想在df1中选择满足以下条件的行:
1) df1.number == df2.number
2) df1.timestamp >= df2.startdate
3) df1.timestamp <= df2.enddate
两个Dataframe具有不同的列,但共享数字列:
df1型
电话:2132002-10-26t07:55:344322020-11-26t07:55:34
df2型
号码起始日期终止日期2132002-10-262020-10-284322020-10-132020-11-26
我搞不清楚。我认为左半联接与filter/where子句组合应该可以做到这一点,但它不起作用:
df3 = df1.join(df2, on=['number'], how='left_semi').where((df1.timestamp >= df2.startdate) & (df1.timestamp <= df2.enddate))
感谢您的意见!
2条答案
按热度按时间yfwxisqw1#
ej83mcc02#
不能在联接之后应用筛选器,因为
df2
联接后不再存在。相反,您可以将所有条件放入
on
连接的一部分:在比较之前,最好将列转换为相同的类型,例如。