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

如何在Pandas中基于ProcessID索引比较DataFrame并删除不匹配行?

基于重复ProcessID索引匹配并删除不匹配行的解决办法

嘿,作为Pandas新手遇到这种带重复索引的DataFrame匹配问题太正常啦!先帮你理清楚核心需求:我们要保留两个DataFrame里ProcessID索引互相存在的行,删掉两边独有的那些。结合你的数据情况(df1有200行、df2有250行,都有重复的ProcessID索引),给你两种好用的方法:

方法一:用merge做内连接(最直观的匹配方式)

Pandas的merge函数专门用来处理DataFrame的关联匹配,内连接(how='inner')会自动只保留两边都存在的ProcessID对应的行,连重复的匹配项也会完整保留,完全适配你的场景。

代码示例:

# 如果你想得到一个合并了两表数据的新DataFrame:
combined_df = df1.merge(df2, left_index=True, right_index=True, how='inner')

# 要是你只想分别保留原df1和df2的独立结构(比如df1不需要df2的Day/Time/Status列),可以这么做:
# 先找出两个索引的交集(包含重复的ProcessID)
common_ids = df1.index.intersection(df2.index)
# 筛选df1中属于交集的行
filtered_df1 = df1.loc[common_ids]
# 筛选df2中属于交集的行
filtered_df2 = df2.loc[common_ids]

比如你的示例数据里,df1和df2都有两个500的索引,筛选后这两行都会被保留,不会因为重复被丢掉~

方法二:用isin直接筛选(更简洁的写法)

如果你偏爱直接用索引做筛选判断,isin方法可以快速帮你找出匹配的行:

代码示例:

# 把df1中索引存在于df2索引里的行挑出来
filtered_df1 = df1[df1.index.isin(df2.index)]
# 同理处理df2
filtered_df2 = df2[df2.index.isin(df1.index)]

这个写法更短,效果和方法一完全一样,同样会保留所有重复的匹配项,非常适合快速处理。

验证一下结果

你可以打印出来看看筛选后的效果,比如:

print("筛选后的df1:")
print(filtered_df1)
print("\n筛选后的df2:")
print(filtered_df2)

用你的示例数据测试的话,两个DataFrame都会保留248、436、500、500对应的行,完全符合你的要求哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:57:13