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

Python计算pandas DataFrame两列互相匹配值占比的实现方法

import pandas as pd
df = pd.DataFrame({"true_key" :["Astral","Blob","Blob","Cat","Astral"], "true_key2": ["Japan","Astral","Blob","quics","Cat"]})

方法1:pandas内置isin()实现(最常用)

直接调用Series的isin()方法返回布尔序列,对布尔序列求均值即可得到占比:

# 计算true_key列的值存在于true_key2的百分比
rate_key_in_key2 = df['true_key'].isin(df['true_key2']).mean() * 100
# 计算true_key2列的值存在于true_key的百分比
rate_key2_in_key = df['true_key2'].isin(df['true_key']).mean() * 100

上述代码运行后,rate_key_in_key2结果为100.0,rate_key2_in_key结果为60.0,和示例预期一致。


方法2:numpy的in1d()实现

如果习惯用numpy操作,也可以用np.in1d()实现相同逻辑,性能和isin基本一致:

import numpy as np
rate_key_in_key2 = np.in1d(df['true_key'], df['true_key2']).mean() * 100
rate_key2_in_key = np.in1d(df['true_key2'], df['true_key']).mean() * 100

方法3:手动统计实现(适合自定义逻辑扩展)

如果需要在判断存在性时加入自定义逻辑,可以手动把参考列转成集合后遍历统计:

def calc_overlap_rate(check_series, ref_series):
    # 把参考列转成集合,提升查找效率
    ref_set = set(ref_series)
    match_count = sum(1 for val in check_series if val in ref_set)
    return match_count / len(check_series) * 100

rate_key_in_key2 = calc_overlap_rate(df['true_key'], df['true_key2'])
rate_key2_in_key = calc_overlap_rate(df['true_key2'], df['true_key'])

补充:按唯一值计算重合度

如果需求是统计两列的唯一取值的重合占比,先对两个列去重再计算即可:

unique_key = df['true_key'].drop_duplicates()
unique_key2 = df['true_key2'].drop_duplicates()

# true_key的唯一值存在于true_key2唯一值的占比
rate_unique_key_in_key2 = unique_key.isin(unique_key2).mean() * 100
# true_key2的唯一值存在于true_key唯一值的占比
rate_unique_key2_in_key = unique_key2.isin(unique_key).mean() * 100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:27:03