如何获取两个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
相关产品推荐
相关产品推荐

