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

如何从列数不同的两个DataFrame提取公共元素?merge()不适用

要实现你要的结果,核心是找出两个DataFrame中完全匹配的行,同时保留指定的顺序(从结果看是保留DF1里公共元素的顺序),给你两种可行的方法:

方法一:用行元组筛选交集

把DF2的所有行转换成元组集合,然后在DF1里筛选属于这个集合的行,直接保留DF1的原有顺序:

import pandas as pd

# 构造贴合你输入的DataFrame,第二列列名为0
df1 = pd.DataFrame({
    'Animals': ['Octopus', 'Fish', 'Mouse', 'Cat', 'Dolphin'],
    0: ['Aquatic', 'Aquatic', 'Land', 'Land', 'Aquatic']
})
df2 = pd.DataFrame({
    'Animals': ['Cat', 'Fish', 'Shark'],
    0: ['Land', 'Aquatic', 'Aquatic']
})

# 将DF2的行转为元组集合
df2_rows = set(zip(df2['Animals'], df2[0]))
# 筛选DF1中匹配的行
result = df1[df1.apply(tuple, axis=1).isin(df2_rows)]

执行后result的行顺序和DF1里的公共元素一致,就是你要的结果。

方法二:Merge后按DF1顺序重排

如果想用merge,也可以先取交集,再按DF1的元素顺序重新排序:

import pandas as pd

df1 = pd.DataFrame({
    'Animals': ['Octopus', 'Fish', 'Mouse', 'Cat', 'Dolphin'],
    0: ['Aquatic', 'Aquatic', 'Land', 'Land', 'Aquatic']
})
df2 = pd.DataFrame({
    'Animals': ['Cat', 'Fish', 'Shark'],
    0: ['Land', 'Aquatic', 'Aquatic']
})

# 先merge得到两个DF的共同行
merged = pd.merge(df1, df2, on=['Animals', 0])
# 按照DF1中Animals的顺序重新排列结果
result = merged.set_index('Animals').reindex(df1['Animals']).dropna().reset_index()

这样两种方法都能解决merge后顺序不符合预期的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:50:44