I have 2 datasets:
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
I want to filter df2 on matching columns df1.teamid == df2.teamid and df2.date between df1.startdate and df1.enddate.
I tried many variations of:
df2_filtered = df2[(df2['teamid'].isin(df1['teamid'])) & (df2['date'] >= df1['startdate']) & (df2['date'] <= df1['enddate'])]
Which gives me a ValueError: Can only compare identically-labeled Series objects.
I also tried
df2_filtered = df2[(df2['teamid'].isin(df1['teamid'])) & (str(df2['date']) >= df1['startdate']) & (str(df2['date']) <= df1['enddate'])]
This results in 0 rows. Based on df1 and df2 there are matching rows that should pop up (rows 2 and 3 from df2).
How should I set the filter and why is the last option not working?
 
    