如何用Python将单列数据拆分多列且每列仅含对应唯一值?
Python实现单列逗号分隔数据按存在性拆分多列
针对你需要将单列逗号分隔的等级数据拆分为多列,每列仅填充对应等级值(无对应值则为缺失值)的需求,可以通过以下pandas代码实现:
import pandas as pd # 原始数据 df = pd.DataFrame({"grade": ["a,b,c", "d,e,f", "b,d,a", "a,b,c,d,e,f"]}) # 将grade列拆分为列表形式,方便后续检查 df['grade_list'] = df['grade'].str.split(',') # 提取所有唯一的等级并排序 all_grades = sorted({grade for sublist in df['grade_list'] for grade in sublist}) # 为每个等级创建对应列:存在则填等级值,否则填缺失值 for grade in all_grades: # 生成列名(如Grade_A对应等级a) col_name = f"Grade_{grade.upper()}" # 判断每行是否包含当前等级,填充对应值或缺失值 df[col_name] = df['grade_list'].apply(lambda x: grade if grade in x else pd.NA) # 移除辅助列,保留原grade列和新生成的等级列 df = df.drop('grade_list', axis=1) # 查看结果 print(df)
代码说明:
- 拆分列:用
str.split(',')将每行的逗号分隔字符串转为列表,便于快速检查等级是否存在。 - 提取唯一等级:通过集合推导式从所有行中提取不重复的等级,并排序保证列顺序统一。
- 生成目标列:遍历每个等级,判断每行是否包含该等级,包含则填充等级值,否则填充pandas标准缺失值
pd.NA(若需要显示字符串"NA",可替换为"NA")。 - 清理辅助列:移除中间生成的
grade_list列,得到符合需求的最终数据框。
运行后输出的结果与你期望的格式一致,每列仅显示对应等级值,无对应值则为缺失值。
内容的提问来源于stack exchange,提问作者Mohamed Ibrahim
相关产品推荐
相关产品推荐

