有选择地删除pandas数据帧中已弃用的行

时间:2015-07-31 07:57:03

标签: python pandas

我有一个包含如下所示数据的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

如果多个条目具有相同的pgas,我需要删除除v之外的所有条目}。原因是这个数据的原始来源是一种事件日志,每一行对应一个"新的总数"。如果重要,源数据按时间排序并包含时间戳索引,为简洁起见,我删除了该索引。具有最新日期的条目与具有最高v的条目相同,因为v仅增加。

从上述数据中抽取一个例子,给出:

p,g,a,s,v
15,195,1765,11,7
15,195,1765,11,8
15,195,1765,11,9

我需要删除前两行并保留最后一行。

1 个答案:

答案 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