Pandas拆分多值列并堆叠列时的课程数据缺失问题
问题解决:Pandas中堆叠与拆分列时的课程数据缺失问题
问题背景
现有处理逻辑能正常处理参会人数用&分隔的场景,但当单日多场会议参会人数相同(无&分隔)时,会遗漏存在有效值的非对应索引课程数据,比如示例中session3的Course 2数据。
示例数据集
import pandas as pd import numpy as np df = pd.DataFrame({'Session':['session1', 'session2','session3'], 'Course 1':['intro to','advanced','Cv'], 'Course 2':['Computer skill',np.nan,'Write cover letter'], 'Attendees':['24 & 46','23','30']})
原有代码问题分析
原有逻辑通过遍历Attendees拆分后的列表元素,仅保留对应索引的Course(如第0个参会人数对应Course 1,第1个对应Course 2),其余Course设为NaN。但当Attendees只有一个值时,循环仅执行一次,直接忽略了其他存在有效值的Course(比如session3的Course 2)。
修正方案
核心思路:先识别每个Session下非NaN的有效Course列,再根据参会人数列表的长度,将参会人数与有效Course做对应分配:
- 若参会人数列表长度等于有效Course数量:一一对应分配
- 若参会人数只有一个值:将该值分配给所有有效Course
修正后的代码:
import pandas as pd import numpy as np df = pd.DataFrame({'Session':['session1', 'session2','session3'], 'Course 1':['intro to','advanced','Cv'], 'Course 2':['Computer skill',np.nan,'Write cover letter'], 'Attendees':['24 & 46','23','30']}) # 拆分参会人数为列表 df['Attendees'] = df['Attendees'].str.split(' & ') # 初始化空结果集 result = [] for _, row in df.iterrows(): session = row['Session'] attendees = row['Attendees'] # 筛选当前行非NaN的Course列(提取列名和对应值) valid_courses = [(col, val) for col, val in row.items() if col.startswith('Course ') and pd.notna(val)] course_count = len(valid_courses) # 处理参会人数与Course的对应关系 if len(attendees) == course_count: # 一一对应分配 for (course_col, course_val), attendee in zip(valid_courses, attendees): result.append({ 'Session': session, 'level_1': course_col, 'Courses': course_val, 'Attendees': attendee }) else: # 参会人数只有一个,分配给所有有效Course attendee = attendees[0] for course_col, course_val in valid_courses: result.append({ 'Session': session, 'level_1': course_col, 'Courses': course_val, 'Attendees': attendee }) # 转换为DataFrame final_df = pd.DataFrame(result) print(final_df)
输出结果
Session level_1 Courses Attendees 0 session1 Course 1 intro to 24 1 session1 Course 2 Computer skill 46 2 session2 Course 1 advanced 23 3 session3 Course 1 Cv 30 4 session3 Course 2 Write cover letter 30
内容的提问来源于stack exchange,提问作者hyeri
相关产品推荐
相关产品推荐

