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

pandas如何将含关系列的DataFrame转换为源-目标实体对结构

实现方案

可以直接通过pandas原生的melt+explode组合实现需求,处理效率高,适配你的所有输入场景,代码如下:

import numpy as np
import pandas as pd

# 构造示例输入
i = [['a', np.nan, np.nan, ['d', 'e']],
     ['b', 'f', np.nan, np.nan],
     ['c', np.nan, 'g', 'h']]
inputs = pd.DataFrame(i, columns=['source', 'mom', 'dad', 'sibling'])

# 核心处理逻辑
# 1. 宽表转长表,删除目标为空的无效行
df_long = inputs.melt(
    id_vars='source', 
    value_vars=['mom', 'dad', 'sibling'],
    var_name='relation', 
    value_name='target'
).dropna(subset='target')

# 2. 统一将目标值转为列表格式,避免单个字符串被explode拆分为单个字符
df_long['target'] = df_long['target'].apply(lambda x: x if isinstance(x, list) else [x])

# 3. 展开列表为单独行,重置索引得到最终结果
output = df_long.explode('target').reset_index(drop=True)
print(output)

运行后输出结果为:

source relation target
0      b      mom      f
1      c      dad      g
2      a  sibling      d
3      a  sibling      e
4      c  sibling      h

你给出的示例输出里最后一行的sib属于笔误,实际输出会保留原关系名sibling,如果需要自定义关系名映射,额外对relation列做一次replace处理即可。

如果你的pandas版本低于1.3,可升级到最新稳定版获得最佳的explode兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:03