如何过滤DataFrame行以保留与另一DataFrame共有的日期记录
Pandas 按共有日期过滤DataFrame行
要过滤掉df1里不在df2日期列中的行,实现日期维度对齐,直接用成员判断做布尔索引即可,操作前先统一两表日期列的格式,避免类型不匹配导致筛选错误。
推荐实现方法
第一步先把两个表的日期列统一转为datetime类型,避免字符串格式、时间精度不一致的问题:
import pandas as pd df1['Date'] = pd.to_datetime(df1['Date']) df2['Date'] = pd.to_datetime(df2['Date'])
第二步用isin()方法筛选df1中日期存在于df2日期列的行:
df1_filtered = df1[df1['Date'].isin(df2['Date'])].reset_index(drop=True)
执行后得到的结果和预期完全一致:
| Date | Value |
|---|---|
| 2014-09-19 | 1 |
| 2014-09-22 | 2 |
| 2014-09-23 | 1 |
可选替代方案
如果后续需要关联两表的其他字段,也可以用内连接的方式实现相同的过滤效果,仅保留共有日期的行:
# 只取df2的日期列做关联,避免带入df2的其他字段 df1_filtered = df1.merge(df2[['Date']], on='Date', how='inner')
注意:如果日期列带有时分秒信息,需要先将两表日期统一截断到日粒度再匹配,否则会因时分秒差异被判定为不匹配,截断操作可使用
df['Date'] = df['Date'].dt.date或者df['Date'] = df['Date'].dt.normalize()完成。
内容的提问来源于stack exchange,提问作者tmrgn
相关产品推荐
相关产品推荐

