代码之家  ›  专栏  ›  技术社区  ›  zef

如何在另一个数据帧中的(日期)值上筛选数据帧[重复]

  •  1
  • zef  · 技术社区  · 7 年前

    我有两个数据集:

    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'])]
    

    这给了我一个值错误:只能比较相同标记的序列对象。

    我也试过了

    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 回复  |  直到 7 年前
        1
  •  2
  •   rafaelc    7 年前

    IIUC公司

    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