You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取两个Pandas DataFrame的公共索引并筛选对应数据?

保留两个Pandas DataFrame的共同索引行

没问题!要实现只保留两个DataFrame索引交集对应的行,咱们可以按下面的步骤来操作,简单又高效:

1. 先还原原始的DataFrame

首先根据你给出的数据,咱们先把df1和df2构造出来(注意要把日期转换成Pandas能识别的索引格式):

import pandas as pd

# 构建df1
df1_data = {1: [-0.055276, 0.027427, 0.066009, 0.012749, 0.113892]}
df1_index = pd.to_datetime(["28/11/2000", "29/11/2000", "30/11/2000", "01/12/2000", "04/12/2000"], dayfirst=True)
df1 = pd.DataFrame(df1_data, index=df1_index)

# 构建df2
df2_data = {2: [-0.004808, -0.001812, -0.026316, 0.015222, -0.024480]}
df2_index = pd.to_datetime(["24/11/2000", "27/11/2000", "28/11/2000", "29/11/2000", "30/11/2000"], dayfirst=True)
df2 = pd.DataFrame(df2_data, index=df2_index)

2. 获取两个索引的交集

用Pandas内置的intersection()方法,就能快速找出两个DataFrame共有的索引:

common_dates = df1.index.intersection(df2.index)

3. 筛选出共同索引对应的行

接着用loc[]方法分别对两个DataFrame进行筛选,只保留这些共同日期的行:

filtered_df1 = df1.loc[common_dates]
filtered_df2 = df2.loc[common_dates]

4. 验证结果

运行后,filtered_df1就和你期望的一致:

1
2000-11-28 -0.055276
2000-11-29  0.027427
2000-11-30  0.066009

filtered_df2的结果也完全符合要求:

2
2000-11-28 -0.026316
2000-11-29  0.015222
2000-11-30 -0.024480

小技巧:一行代码搞定

如果想更简洁,也可以把筛选步骤合并成一行:

filtered_df1, filtered_df2 = df1.loc[common_dates], df2.loc[common_dates]

这样就能快速得到你需要的两个仅保留共同索引数据的DataFrame啦。

内容的提问来源于stack exchange,提问作者astudentofmaths

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:22:58