Python for循环中调用多返回值自定义函数 如何拆分推荐课程为多列
解决方案
提供两种可直接落地的处理方法,优先推荐第一种从数据源端优化的方案,出错概率更低。
方案1:调整循环逻辑,从根源避免列合并
你的c_recommend函数返回的是长度为3的Series,直接在追加结果时展开序列即可,不需要后续额外拆分:
results = list() ## 遍历成绩单 for i in transcript.index: student_name = transcript['student'].loc[i] taken_course = transcript['Course'].loc[i] # 直接把推荐结果转成列表后展开,追加到当前行的元素中 rec_courses = c_recommend(transc['Course'].loc[i]).tolist() results.append([student_name, taken_course, *rec_courses]) # 转成DataFrame时直接指定列名即可 res_df = pd.DataFrame(results, columns=['Student', 'Taken Class', 'Recommended Classes', 'Reco Class 2', 'Reco Class 3'])
方案2:对已生成的合并列DataFrame做拆分
如果你已经生成了推荐列合并的DataFrame,不需要重新跑推荐逻辑,用pandas内置方法即可拆分:
情况A:合并列存储的是逗号分隔的字符串
# 假设你当前的DataFrame名为df,合并的推荐列名为Recommended Classes df[['Recommended Classes', 'Reco Class 2', 'Reco Class 3']] = df['Recommended Classes'].str.split(', ', expand=True)
情况B:合并列存储的是Series对象
# 把推荐列的每个元素转成列表,再生成新的三列DataFrame,和原表拼接 rec_df = pd.DataFrame(df['Recommended Classes'].tolist(), index=df.index, columns=['Recommended Classes', 'Reco Class 2', 'Reco Class 3']) res_df = pd.concat([df[['Student', 'Taken Class']], rec_df], axis=1)
内容的提问来源于stack exchange,提问作者chris_tina
相关产品推荐
相关产品推荐

