例如,我有一个如下的DataFrame。

lineNum        id         name            Cname           score
  1            001        Jack             Math           99
  2            002        Jack             English        110
  3            003        Jack             Chinese        90
  4            003        Jack             Chinese        90
  5            004        Tom              Math           Nan
  6            005        Tom              English        75
  7            006        Tom              Chinese        85


如您所见,我想对该数据进行数据清理。
1)删除第3行和第4行的重复值。
2)处理不合理的价值。在第2行中,杰克的英语获得了110分,这超过了最大值100。我想将他的分数设置为所有学生的英语分数的平均值。
3)处理楠值。汤姆的数学成绩是Nan。我想更改为所有学生的数学成绩的平均值。

我可以分别满足所有要求。但是我不知道如何满足所有这三个要求。谢谢!

最佳答案

计划


我删除重复开始。
使用mask得分> 100 null
筛选新数据框并按均值分组
映射均值并使用它来填充空值




d = df.drop_duplicates(['id', 'name', 'Cname'])

s0 = d.score
s1 = s0.mask(s > 100)
m = s1.mask(s1 > 100).notnull()

d.assign(score=s1.fillna(d.Cname.map(d[m].groupby('Cname').score.mean())))

   lineNum  id  name    Cname  score
0        1   1  Jack     Math   99.0
1        2   2  Jack  English  110.0
2        3   3  Jack  Chinese   90.0
4        5   4   Tom     Math   99.0
5        6   5   Tom  English   75.0
6        7   6   Tom  Chinese   85.0

关于python - 如何在 Pandas 中进行复杂的数据清理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43382838/

10-12 00:24
查看更多