【问题标题】:Boolean indexing between two different Dataframes in PandasPandas 中两个不同数据框之间的布尔索引
【发布时间】:2020-05-21 21:10:43
【问题描述】:

所以我有两个不同长度的不同数据框和一个公共列:date,我想对其进行布尔索引,以便它匹配从df2df1的日期在它们相同的行上.第一个数据框df1 有每日日期,而df2 有日期之间的间隔。

DF1:

             date   usd_am   usd_pm   usd_avg
13235  2020-05-14  1716.40  1731.60  1724.000
13236  2020-05-15  1734.85  1735.35  1735.100
13237  2020-05-18  1756.90  1734.70  1745.800
13238  2020-05-19  1735.25  1737.95  1736.600
13239  2020-05-20  1750.05  1748.30  1749.175

(13240, 4)

DF2:

            day        date          time
1863   Thursday  2050-09-01   10:30:54 am
1864     Friday  2050-09-30   06:31:48 pm
1865     Sunday  2050-10-30   04:16:00 am
1866     Monday  2050-11-28   04:09:48 pm
1867  Wednesday  2050-12-28   06:15:36 am

(1868, 3)

两个日期列的格式都已统一,并存储为字符串。

我试过这个: df1['match'] = df1[df1['date'] == df2['date']]

但我得到了这个错误: ValueError: Can only compare identically-labeled Series objects

预期的输出应该是:

DF1:

             date   usd_am   usd_pm   usd_avg  match
13235  2020-05-14  1716.40  1731.60  1724.000  False
13236  2020-05-15  1734.85  1735.35  1735.100  True
13237  2020-05-18  1756.90  1734.70  1745.800  True
13238  2020-05-19  1735.25  1737.95  1736.600  True
13239  2020-05-20  1750.05  1748.30  1749.175  False

如果匹配值为 True,则日期也存在于 df2 中。

【问题讨论】:

  • 你能提供预期的输出吗?
  • 当然,它已经更新了。 @FrancisWebb

标签: python python-3.x pandas dataframe


【解决方案1】:

尝试使用 pandas isin 生成新列,然后使用所需名称添加它 - 请参阅 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isin.html

    df2['match'] = df2['date'].isin(df1['date'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多