如何从二进制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'])
运行代码后会得到以下结果:
| Dept | Field |
|---|---|
| Biotech | Chemistry |
| AI | Chemistry |
| Chemistry | Biotech |
| Chemistry | AI |
可以看到所有自关联的条目(比如Biotech行和Biotech列的1)都被排除了。
内容的提问来源于stack exchange,提问作者Mimikyu o_0
相关产品推荐
相关产品推荐

