Python3.6下Pandas根据DataFrame列值生成对应数据集的问题
解决方案
首先先修正你的DataFrame数据格式(处理列名和值里的多余点号、大小写问题),避免匹配失败:
import pandas as pd # 构造正确的DataFrame data = { 'Roll': [123, 789, 445, 675], 'marks': [56, 70, 89, 45], 'grade': ['Fair', 'Good', 'Good', 'Fair'], 'section': ['A', 'A', 'C', 'b'], 'Team': ['Titans', 'Kings', 'Giants', 'Boss'] } dm = pd.DataFrame(data)
1. 按grade筛选生成对应数据集
情况1:grade为"Fair"时生成Final
# 筛选grade等于Fair的行 fair_rows = dm[dm['grade'] == 'Fair'] # 生成目标字典,注意列名要和DataFrame一致(Roll、Team) Final = { 'activities': fair_rows['Team'].tolist(), 'student': fair_rows['Roll'].tolist() } # 转成DataFrame展示 final_df = pd.DataFrame(Final) print(final_df)
输出结果:
activities student 0 Titans 123 1 Boss 675
情况2:grade为"Good"时生成Final2
# 筛选grade等于Good的行 good_rows = dm[dm['grade'] == 'Good'] # 生成目标字典 Final2 = { 'type': good_rows['Team'].tolist(), 'student': good_rows['marks'].tolist() } # 转成DataFrame展示 final2_df = pd.DataFrame(Final2) print(final2_df)
输出结果:
type student 0 Kings 70 1 Giants 89
2. 你之前代码的错误原因
- 字符串比较要用
==而不是is:is是比较对象内存地址,字符串比较值应该用== - 匹配字符串要精确一致:原数据里的grade值是
Fair./Good.(带点),而你写的fair是小写且无点,导致匹配失败,需要先清洗数据或者写精确的匹配值(比如dm['grade'] == 'Fair.')
内容的提问来源于stack exchange,提问作者CoderG
相关产品推荐
相关产品推荐

