【发布时间】:2021-05-02 12:30:42
【问题描述】:
假设我有多个数据框:
print (df1)
datetime A
0 2012-08-14 07:00 1
1 2012-08-14 07:01 2
2 2012-08-14 08:15 3
... ...
192908 2013-08-14 16:00 600
192948 2013-08-14 16:15 700
192949 2013-08-14 16:57 900
print (df2)
datetime B
0 2012-08-14 07:00 100
1 2012-08-14 07:15 200
2 2012-08-14 07:30 300
... ...
12140 2013-09-24 15:45 50
12141 2013-09-24 16:00 60
12142 2013-09-24 16:15 70
如何创建一个新的 df,只包含在同一日期时间列 A 和 B 中有值的行?我尝试使用isin 函数:
df1 = df1[df1['date'].isin(df2['date'])]
但这仅进行单向检查,即仅保留 A 的值,在同一 datetime 中存在 B 的值,但如果 B 中存在额外的值A 中不存在的日期时间则留在 df2 中。
我可以在相反的方向重复操作来解决这个问题:
df2 = df2[df2['date'].isin(df1['date'])]
但是对于 >2 个数据帧(我目前的工作中大约有 50 个),这变得非常冗长且效率低下,因为有必要遍历整个数据帧集之间的所有可能配对组合。例如,首先需要对照 df1 和 df2 检查第三个数据帧 df3,但如果它包含既不存在于 df1 也不存在于 df2 中的日期时间,则 df1 和 df2 将反过来需要对照 df3 重新检查。
所需的输出是重新定义所有数据帧,使它们仅包含 A、B 等值以及匹配的日期时间值。
【问题讨论】:
-
请提供可重现的输入和预期的输出样本
标签: python pandas dataframe filter isin