我有2个数据集:df1:teamid points startdate enddate1 30 2017-07-01 2018-06-302 41 2016-07-01 2017-06-303 32 2016-07-01 2017-06-30df2:teamid date color1 2017-01-02 red1 2018-01-02 yellow2 2017-06-05 blue3 2014-01-05 red4 2016-03-02 brown我想在df1.startdate和df1.enddate之间的匹配列df1.teamid == df2.teamid和df2.date上过滤df2。我尝试了多种变体:df2_filtered = df2[(df2['teamid'].isin(df1['teamid'])) & (df2['date'] >= df1['startdate']) & (df2['date'] <= df1['enddate'])]这给我带来了ValueError:只能比较标记相同的Series对象。我也试过了df2_filtered = df2[(df2['teamid'].isin(df1['teamid'])) & (str(df2['date']) >= df1['startdate']) & (str(df2['date']) <= df1['enddate'])]结果为0行。基于df1和df2,应该弹出匹配行(df2的第2行和第3行)。我应该如何设置过滤器,为什么最后一个选项不起作用?
1 回答

慕的地6264312
TA贡献1817条经验 获得超6个赞
联合会
ndf = pd.merge(df,df2, on='teamid', how='outer')
ndf.loc[ndf.date.between(ndf.startdate, ndf.enddate)]
teamid points startdate enddate date color
1 1 30.0 2017-07-01 2018-06-30 2018-01-02 yellow
2 2 41.0 2016-07-01 2017-06-30 2017-06-05 blue
添加回答
举报
0/150
提交
取消