我有一个包含如下数据的数据框。
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
我需要删除前两行并保留最后一行。
最佳答案
如果我理解正确的话,我认为您想要以下内容,这会对您感兴趣的列执行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
关于python - 有选择地删除 pandas 数据框中已弃用的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31740988/