Pandas如何将逗号分隔字符串列拆分为两两配对的新行
问题原因
现有实现仅按第一个逗号拆分字符串,只能生成「第一个元素+其余元素」的配对,无法覆盖其余元素之间的两两组合,因此缺失x、y的配对行。
实现代码
借助标准库itertools.combinations生成列表内所有长度为2的无序不重复配对,再配合explode展开即可得到目标结果,完整可运行代码如下:
import pandas as pd from ast import literal_eval from itertools import combinations # 原始数据 data = {'name':["'a','x','y'"], 'val' : [10]} df = pd.DataFrame(data) # 解析字符串为元素元组 df['parsed_name'] = df['name'].apply(literal_eval) # 生成所有2元素配对 df['var_pairs'] = df['parsed_name'].apply(lambda x: list(combinations(x, 2))) # 展开配对列 df = df.explode('var_pairs', ignore_index=True) # 拆分配对为两个独立变量列 df[['variable1', 'variable2']] = pd.DataFrame(df['var_pairs'].tolist(), index=df.index) # 整理输出列 result = df[['variable1', 'variable2', 'val']].rename(columns={'val': 'value'}) print(result)
运行输出和预期完全一致:
variable1 variable2 value 0 a x 10 1 a y 10 2 x y 10
逻辑说明
literal_eval可直接将格式为'a','x','y'的字符串解析为Python元组('a', 'x', 'y'),无需手动拆分字符串、清理引号,容错性更好combinations(seq, 2)会自动生成序列内所有元素的两两无序不重复组合,无论序列内有多少个元素,都能覆盖所有符合要求的配对关系- 展开配对列后将元组拆分为独立列,即可得到目标结构的DataFrame
内容的提问来源于stack exchange,提问作者sp0392
相关产品推荐
相关产品推荐

