python - 有选择地删除 pandas 数据框中已弃用的行

标签 python pandas

我有一个包含如下数据的数据框。

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

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

最佳答案

如果我理解正确的话,我认为您想要以下内容,这会对您感兴趣的列执行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/

相关文章:

python - 关于Python的内置类型是可迭代对象的问题

python - XlsxWriter 不同时写入多个列

python - 使用 pandas 在 Python 中计算新列

python - 遍历一个numpy数组

python - 使用 ProxyConnector 进行 aiohtttp 连接池

python - 如何根据特定条件过滤重复行

python - 取 pandas 数据框中一系列行的平均值

python - 权重随时间变化的时间序列的加权平均值

python - 如何同时使用字典和数组的 for 循环

python - Pandas 数据帧 : Assigning integer values based on the column value