我有一个包含如下所示数据的Dataframe。
p,g,a,s,v
15,196,1399,16,5
15,196,948,5,1
15,196,1894,5,1
15,196,1616,5,1
15,196,1742,3,1
15,196,1742,4,4
15,196,1742,5,1
15,195,732,9,2
15,195,1765,11,7
15,196,1815,9,1
15,196,1399,11,8
15,196,1958,0,1
15,195,767,9,1
15,195,1765,11,8
15,195,886,9,1
15,195,1765,11,9
15,196,1958,5,1
15,196,1697,1,1
15,196,1697,4,1
如果多个条目具有相同的p
,g
,a
和s
,我需要删除除v
之外的所有条目}。原因是这个数据的原始来源是一种事件日志,每一行对应一个"新的总数"。如果重要,源数据按时间排序并包含时间戳索引,为简洁起见,我删除了该索引。具有最新日期的条目与具有最高v
的条目相同,因为v
仅增加。
从上述数据中抽取一个例子,给出:
p,g,a,s,v
15,195,1765,11,7
15,195,1765,11,8
15,195,1765,11,9
我需要删除前两行并保留最后一行。
答案 0 :(得分:1)
如果我理解正确,我认为您需要以下内容,则会对您感兴趣的cols执行groupby
,然后获取列{' v'的max
值。然后我们拨打reset_index
:
In [103]:
df.groupby(['p', 'g', 'a', 's'])['v'].max().reset_index()
Out[103]:
p g a s v
0 15 195 732 9 2
1 15 195 767 9 1
2 15 195 886 9 1
3 15 195 1765 11 9
4 15 196 948 5 1
5 15 196 1399 11 8
6 15 196 1399 16 5
7 15 196 1616 5 1
8 15 196 1697 1 1
9 15 196 1697 4 1
10 15 196 1742 3 1
11 15 196 1742 4 4
12 15 196 1742 5 1
13 15 196 1815 9 1
14 15 196 1894 5 1
15 15 196 1958 0 1
16 15 196 1958 5 1