我对Pandas相当陌生,急需帮助,通过比较多个组对中的连续行来修改我的数据帧:
数据帧示例=
idData idStation idCast Pressure
1 1 1 1505
2 1 1 1506
3 1 1 1507
4 1 1 1508
5 1 2 1505
6 1 2 1506
7 1 2 1503
8 1 2 1504
9 2 1 1505
10 2 1 1506
11 2 1 1507
等等
对于每个idStation和idCast对(即idData=7和8的行,需要删除该行的压力值小于其上方的行)。我不想比较不同的idStation&idCast对,即循环的第一次迭代将查看idStation=1、idCast=1的压力记录,循环的第二次迭代将查看idStation=1、idCast=2等的记录)。我尝试过按idStation和idCast进行分组,然后在它们上循环并逐行比较,但这只修改了一个副本,而不是原始的数据帧,并且更改会丢失。在
^{pr2}$这将正确的压力值标记为nan(因为我不确定如何删除该行),但仅适用于组视图。在
如何创建dataframe的副本(以便访问原始版本和修改版本),然后删除上面提到的行?在
您可以使用
boolean indexing
,条件是每个组的Pressure
值不低于该组的.cummax()
。在.groupby()
来处理['idStation', 'idCast']
的唯一子集。在'Pressure'
值是否低于正在运行的max
(cummax()
),并返回逆值{False
,如果该值低于此值)。结果从groupby()
返回为.values
。在boolean indexing
中使用2.
的结果删除符合条件的行。在在
pandas
代码中,如下所示:获得:
^{pr2}$您还可以消除@MaxU建议的
.apply()
步骤,以使玩具数据的速度提高约40%:相关问题 更多 >
编程相关推荐