如何根据另一个数据框中的(日期)值过滤一个数据框

我有2个数据集:


df1:


teamid  points  startdate  enddate

1       30      2017-07-01 2018-06-30

2       41      2016-07-01 2017-06-30

3       32      2016-07-01 2017-06-30

df2:


teamid  date        color

1       2017-01-02  red

1       2018-01-02  yellow

2       2017-06-05  blue

3       2014-01-05  red

4       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行)。


我应该如何设置过滤器,为什么最后一个选项不起作用?


ITMISS
浏览 121回答 1
1回答

慕的地6264312

联合会ndf = pd.merge(df,df2, on='teamid', how='outer')ndf.loc[ndf.date.between(ndf.startdate, ndf.enddate)]&nbsp; &nbsp; teamid&nbsp; points&nbsp; startdate&nbsp; &nbsp;enddate date&nbsp; &nbsp; color1&nbsp; &nbsp;1&nbsp; &nbsp;30.0&nbsp; &nbsp; 2017-07-01&nbsp; 2018-06-30&nbsp; 2018-01-02&nbsp; yellow2&nbsp; &nbsp;2&nbsp; &nbsp;41.0&nbsp; &nbsp; 2016-07-01&nbsp; 2017-06-30&nbsp; 2017-06-05&nbsp; blue
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python