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

如何在Python DataFrame中查找列间共同值并生成新DataFrame

解决方法

首先还原你的原始DataFrame:

import pandas as pd

df = pd.DataFrame({
    'A': [1, 1, 1, 2, 2, 4, 5, 5],
    'B': [2, 3, 4, 3, 5, 2, 3, 4]
}, index=[1,2,3,4,5,6,7,8])

步骤1:构建值的双向关联字典

先整理每个值的所有关联对象(不管是在A列还是B列),因为关联是双向的:

from collections import defaultdict

# 用集合存储每个值的关联对象,自动去重
relation = defaultdict(set)

# 遍历每行,双向添加关联关系
for _, row in df.iterrows():
    a, b = row['A'], row['B']
    relation[a].add(b)
    relation[b].add(a)

生成的关联字典内容为:

{1: {2, 3, 4},
 2: {1, 3, 5, 4},
 3: {1, 2, 5},
 4: {1, 2, 5},
 5: {2, 3, 4}}

步骤2:提取配对的共同关联值并生成结果

从原始数据中提取去重的A-B配对,然后找出每个配对的共同第三方关联值,生成目标结构:

# 获取原始数据中去重的A-B配对
unique_pairs = df[['A', 'B']].drop_duplicates().values.tolist()

result_rows = []
for x, y in unique_pairs:
    # 计算两个值的共同关联值
    common_values = relation[x] & relation[y]
    # 排除值本身,只保留第三方共同值
    common_values = common_values - {x, y}
    # 为每个共同值生成一行结果
    for val in common_values:
        result_rows.append({'A': x, 'B': y, 'C': val})

# 转换为DataFrame并调整索引
result_df = pd.DataFrame(result_rows).reset_index(drop=True)
result_df.index = result_df.index + 1

最终得到的result_df就是你需要的结构:

A  B  C
1    1  2  3
2    1  2  4
3    2  3  5

补充说明

  • 如果需要处理特定配对而非全部,可直接替换unique_pairs为指定列表,比如unique_pairs = [(1,2), (2,3)]
  • 原始数据中其他配对(如(4,2))也会被自动处理,生成对应的共同关联值行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:53:27