の最初の発生に基づいて、私は、各学生の最初の月から最大値の最初の出現をドロップしたい大きな辞書パンダ - ドロップ行の下の条件
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]}
のサンプルです。 2回目の出現がある場合は、その出現を維持したい
私はgroupIをStudentId、年、月で計算し、計算された最大値は BookLevelです。
私はその後、私は、次のように見えるデータフレーム持っていた学生一人当たり月額最大値を計算するために、別のデータフレームを行なったし、2つのデータフレームに
を合併:
StudentId year month BookLevel BookLevelMax
0 AAdams 2015 11 1.5 1.5
1 AAdams 2015 11 1.5 1.5
2 AAdams 2015 11 1.2 1.5
3 AAdams 2015 11 1.4 1.5
4 AAdams 2015 12 1.7 1.8
5 AAdams 2015 12 1.8 1.8
6 BBrooks 2015 12 3.2 3.8
7 BBrooks 2015 12 3.1 3.8
8 BBrooks 2015 12 3.8 3.8
9 BBrooks 2016 1 3.3 3.4
10 BBrooks 2016 1 3.4 3.4
を私が最初にドロップしたいですAAdamsの11月に1.5、12月にBBrookの3.8行が発生します
df.dropを使用して、BookLevel MaxとBookLevelが等しい行を削除できます...ただし、学生は、を削除しますは、最初のオカレンスと2番目のオカレンスの両方があります。
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
最初のオカレンスだけを削除して最初の1か月にのみ行う方法はありません。具体的には、AAdamsは11ヶ月で最大1.5です。これは2つの機会に発生します。私は行の1つを維持したいが、他のものを落としたいと思う。そして、それは2番目の月(そして最初の後の数ヶ月の他の生徒の他の出現)で発生するので、私はAAdamsの下で1.8と行を保ちたい。これが理にかなってほしい。 (上記のように)
CmariのおかげでJezraelに感謝しました。他の質問へのあなたの答えの組み合わせは私を最終的な解決に導いた –