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

如何从二进制DataFrame提取值为1的关联对并排除自关联

解决方法:将二进制DataFrame转换为非自关联的(部门,领域)配对

直接用Pandas的内置方法就能快速实现,核心思路是先堆叠DataFrame,再过滤掉自关联和值不为1的条目。

核心代码实现

假设你的DataFrame命名为df,行索引是Dept(部门),列是各类领域:

import pandas as pd

# 堆叠列到行维度,把列名转为二级索引
stacked = df.stack().reset_index()
# 筛选值为1且部门≠领域的记录
valid_pairs = stacked[(stacked[0] == 1) & (stacked['Dept'] != stacked['level_1'])]
# 重命名列并保留需要的配对列
final_pairs = valid_pairs.rename(columns={'level_1': 'Field'})[['Dept', 'Field']]

更简洁的链式写法

如果喜欢紧凑的代码,可以用链式操作一步完成:

final_pairs = (df.stack()
               .reset_index(name='关联标记')
               .query('关联标记 == 1 and Dept != level_1')
               .rename(columns={'level_1': 'Field'})
               .loc[:, ['Dept', 'Field']])

示例演示

比如你有这样的示例DataFrame:

data = {
    'Biotech': [1, 0, 1],
    'AI': [0, 1, 1],
    'Chemistry': [1, 1, 0]
}
df = pd.DataFrame(data, index=['Biotech', 'AI', 'Chemistry'])

运行代码后会得到以下结果:

DeptField
BiotechChemistry
AIChemistry
ChemistryBiotech
ChemistryAI

可以看到所有自关联的条目(比如Biotech行和Biotech列的1)都被排除了。

内容的提问来源于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:10:35