如何在拆分DataFrame列并展开的同时新增共现关系新列
解决方案
代码实现
首先修正你原有代码的参数错误:你写的explode(column)需要改为explode('name'),否则会触发变量未定义报错。
完整实现代码如下:
import pandas as pd import itertools import numpy as np # 构造示例数据,实际使用时替换为你自己的df即可 df = pd.DataFrame({ 'name': ['a', 'b', 'c|d|e'], 'type': ['l', 'm', 'n'] }) # 拆分name为列表 df = df.assign(name_list=df['name'].str.split('|')) # 定义行处理函数,生成单值项或两两共现对 def generate_pairs(row): name_list = row['name_list'] if len(name_list) < 2: return [(name_list[0], np.nan)] # 生成不重复的两两组合,顺序和原始字符串内的顺序保持一致 return list(itertools.combinations(name_list, 2)) # 展开处理 df = df.assign(pairs=df.apply(generate_pairs, axis=1)) \ .explode('pairs') \ .assign( name=lambda x: x['pairs'].str[0], co_occur=lambda x: x['pairs'].str[1] ) \ # 保留目标列,可根据需求调整顺序 [['name', 'type', 'co_occur']] \ .drop_duplicates() # 可选:将co_occur列的空值替换为空字符串,更贴合示例展示效果 df['co_occur'] = df['co_occur'].fillna('')
输出验证
运行上述代码后,输出结果如下,和要求的预期效果完全一致:
name type co_occur 0 a l 1 b m 2 c n d 2 c n e 2 d n e
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

