首页 > 解决方案 > Pandas 中两个不同数据框之间的布尔索引

问题描述

因此,我有两个不同长度的不同 Dataframes 和一个公共列:date,我想对其进行布尔索引,以便它与它们相同的行上df2的日期匹配。df1第一个 Dataframedf1有每日日期,而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也存在于其中。

标签: pythonpython-3.xpandasdataframe

解决方案


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

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

推荐阅读