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

如何移除两个Pandas DataFrame中非共同索引的行?

移除Pandas DataFrame中非共同索引的行

问题背景

已通过以下代码创建两个Pandas DataFrame:

import pandas.util.testing as testing
df = testing.makeDataFrame()

其中df1比原始df少两行,数据如下:

原始df数据:

A   B   C   D
OdhGFPa5Kw  -0.686378   -1.210838   1.160708    0.903309
gelZFj4BG5  1.603112    1.852592    -0.065482   0.684566
mp3Aq5ueGD  0.254211    -0.788877   -0.626789   0.109116
pBtz9DHxUZ  -0.970632   0.982661    -0.463984   -0.123727
K28pzbdYcX  -1.311220   -2.121306   1.209484    -1.695901
71ZFgWaeDE  1.887420    0.337702    -0.176539   0.149089
alWOjkQ2eZ  1.997701    -0.354276   1.997802    -0.086803

df1数据:

A   B   C   D
OdhGFPa5Kw  -0.686378   -1.210838   1.160708    0.903309
gelZFj4BG5  1.603112    1.852592    -0.065482   0.684566
mp3Aq5ueGD  0.254211    -0.788877   -0.626789   0.109116
pBtz9DHxUZ  -0.970632   0.982661    -0.463984   -0.123727
K28pzbdYcX  -1.311220   -2.121306   1.209484    -1.695901

已通过以下代码获取共同索引集合:

duplicates = set(df.index).intersection(df1.index)

需要移除两个DataFrame中索引不在duplicates里的行。

解决方案

方法1:使用loc+isin筛选(推荐,生成新DataFrame)

直接通过索引是否在共同集合中来筛选行,返回新的DataFrame:

# 筛选df中符合条件的行
df_filtered = df.loc[df.index.isin(duplicates)]
# 筛选df1中符合条件的行
df1_filtered = df1.loc[df1.index.isin(duplicates)]

方法2:使用drop原地删除行

如果需要直接修改原DataFrame,可以先找出需要删除的索引,再执行删除:

# 找出df中不在共同索引里的行
to_drop_df = df.index.difference(duplicates)
# 原地删除这些行
df.drop(to_drop_df, inplace=True)

# 同理处理df1
to_drop_df1 = df1.index.difference(duplicates)
df1.drop(to_drop_df1, inplace=True)

方法3:无需手动求交集,直接用Pandas内置方法

可以跳过手动计算交集的步骤,直接利用索引匹配来筛选:

# 直接保留df中存在于df1索引中的行
df_filtered = df[df.index.isin(df1.index)]
# 同理处理df1
df1_filtered = df1[df1.index.isin(df.index)]

或者用join做内连接,自动保留共同索引的行:

# 内连接两个DataFrame,仅保留共同索引的行(会保留双方列,可按需选择)
df_filtered = df.join(df1, how='inner', lsuffix='_original', rsuffix='_df1')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:45:30