基于值拆分Pandas列表列至多列,返回指定标识值
Pandas将列表列拆分为带自定义值的多列
示例输入
| id | values |
|---|---|
| 1 | [A,B,C,D] |
| 2 | [D,E,F] |
| 3 | [A,D] |
| 4 | [K] |
预期输出
| id | values | A | B | C | D | E | F | K |
|---|---|---|---|---|---|---|---|---|
| 1 | [A,B,C,D] | yes_A | yes_B | yes_C | yes_D | no_E | no_F | no_K |
| 2 | [D,E,F] | no_A | no_B | no_C | yes_D | yes_E | yes_F | no_K |
| 3 | [A,D] | yes_A | no_B | no_C | yes_D | no_E | no_F | no_K |
| 4 | [K] | no_A | no_B | no_C | no_D | no_E | no_F | yes_K |
实现代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'id': [1, 2, 3, 4], 'values': [['A', 'B', 'C', 'D'], ['D', 'E', 'F'], ['A', 'D'], ['K']] }) # 提取所有唯一的类别元素并排序 all_categories = sorted({item for sublist in df['values'] for item in sublist}) # 为每个类别生成对应列,填充自定义yes/no值 for cat in all_categories: df[cat] = df['values'].apply(lambda x: f'yes_{cat}' if cat in x else f'no_{cat}') # 调整列顺序,与预期输出对齐(可选) df = df[['id', 'values'] + all_categories] print(df)
代码说明
- 先构造与输入一致的示例数据;
- 通过集合推导式提取所有列表中的唯一元素,排序后保证列顺序稳定;
- 遍历每个类别元素,用
apply判断当前行的列表是否包含该元素,返回对应的yes_xxx或no_xxx; - 可选调整列顺序,让结果列排列和预期输出一致。
内容的提问来源于stack exchange,提问作者Smithy
相关产品推荐
相关产品推荐

