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

如何基于两列值查找两个DataFrame的共同行并计算占比?

基于指定两列匹配DataFrame共同行并计算占比

实现思路

  • 指定需要匹配的目标列,将每行的列值转为元组,实现多列组合的匹配判断
  • 筛选出两个DataFrame中满足匹配条件的行
  • 计算共同行在原DataFrame中的占比

完整代码示例

import pandas as pd
data1 = {
    "first_column": ["id1", "id2", "id3"],
    "second_column": ["1", "2", "2"],
    "third_column": ["1", "2", "2"],
    "fourth_column": ["1", "2", "1"],
}
df1 = pd.DataFrame(data1)
data2 = {
    "first_column": ["id1", "id2", "id3", "id4"],
    "second_column": ["3", "4", "2", "2"],
    "third_column": ["1", "2", "2", "2"],
    "fourth_column": ["1", "2", "2", "2"],
}
df2 = pd.DataFrame(data2)

# 指定用于匹配的两列
match_cols = ["second_column", "third_column"]

# 生成两列值的元组集合,提升匹配效率
df1_match_tuples = set(df1[match_cols].apply(tuple, axis=1))
df2_match_tuples = set(df2[match_cols].apply(tuple, axis=1))

# 筛选df1中的共同行
df1_common = df1[df1[match_cols].apply(tuple, axis=1).isin(df2_match_tuples)]
# 筛选df2中的共同行
df2_common = df2[df2[match_cols].apply(tuple, axis=1).isin(df1_match_tuples)]

# 计算占比
df1_common_ratio = len(df1_common) / len(df1)
df2_common_ratio = len(df2_common) / len(df2)

# 输出结果
print("=== df1中的共同行 ===")
print(df1_common)
print(f"\ndf1共同行占比:{df1_common_ratio:.2%}")

print("\n=== df2中的共同行 ===")
print(df2_common)
print(f"\ndf2共同行占比:{df2_common_ratio:.2%}")

# 可选:合并两个DataFrame的共同行,保留双方所有列
merged_common = pd.merge(df1, df2, on=match_cols, suffixes=('_df1', '_df2'))
print("\n=== 合并后的共同行(含双方所有列) ===")
print(merged_common)

运行结果

=== df1中的共同行 ===
  first_column second_column third_column fourth_column
2          id3             2            2             1

df1共同行占比:33.33%

=== df2中的共同行 ===
  first_column second_column third_column fourth_column
2          id3             2            2             2
3          id4             2            2             2

df2共同行占比:50.00%

=== 合并后的共同行(含双方所有列) ===
  first_column_df1 second_column third_column fourth_column_df1 first_column_df2 fourth_column_df2
0              id3             2            2                 1              id3                 2
1              id3             2            2                 1              id4                 2

说明

  • apply(tuple, axis=1)将每行的目标列转为元组,结合集合的isin方法实现高效的多列组合匹配
  • 若需要保留两个DataFrame的全量列信息,使用pd.merge默认的inner连接即可得到合并后的共同行
  • 占比计算直接用共同行数量除以原DataFrame总行数,格式化为百分比更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:01:42