下面是一本大字典的样本
data ={'StudentId':['AAdams','AAdams','AAdams','AAdams','AAdams','AAdams',
'BBrooks','BBrooks','BBrooks','BBrooks','BBrooks',],
'year':[2015,2015,2015,2015,2015,2015,2015,2015,2015,2016,2016],
'month':[11,11,11,11,12,12,12,12,12,1,1],
'day':[15,16,21,23,1,2,15,18,30,5,7],
'BookLevel':[1.5,1.5,1.2,1.4,1.7,1.8,3.2,3.1,3.8,3.3,3.4]}
我想删除每个学生第一个月的最大值。如果有第二次出现,我想保留它
我使用了groupby by StudentId、year和month并计算了 图书级别。在
然后我做了另一个数据帧来计算每个学生每月的最大值,并合并了两个数据帧
然后我得到了一个如下所示的数据帧:
^{pr2}$我想去掉AAdams在第11个月出现的第一个1.5行,而BBrooks在第12个月的第3.8行
我可以用测向下降删除BookLevel Max等于BookLevel的行…但是它会在每个月为每个学生删除Max并删除 第一次和第二次,如果有两次。在
StudentId year month BookLevel BookLevelMax
2 AAdams 2015 11 1.2 1.5
3 AAdams 2015 11 1.4 1.5
4 AAdams 2015 12 1.7 1.8
6 BBrooks 2015 12 3.2 3.8
7 BBrooks 2015 12 3.1 3.8
9 BBrooks 2016 1 3.3 3.4
我似乎找不到一种方法来只放弃第一次发生的事情,而只在第一个月内完成。具体来说,AAdams在第11个月的最大值为1.5。它发生在两种情况下。我想保留其中一行,但不保留另一行……我希望将行数保持在1.8以下,因为它发生在第二个月(以及其他学生在第一个月之后的几个月出现的情况)。希望这有道理。在
原问题(如上所述):
下面是一个成为dfdata的较大字典的示例
我想删除每个学生第一个月的最大值。如果有第二次出现,我想保留它。除了每个学生的第一个月,我不想改变任何月份
这是我的新解决方案:
^{pr2}$这使得第一个月的最高图书水平达到了每组学生的最高水平。在
然后我用cumcount做了一个分组。在每个学生第一个月的最高图书级别旁边,都会有一个零。在
^{3}$然后我选择所有没有零的行进行分组
任务完成了! 原始尝试是一个很好的例子,它可以看到渐进式的进展,但却忽略了最初的目标。在
试试这个
相关问题 更多 >
编程相关推荐