Python 3.x 如何根据pd.DataFrame中另一列中满足的条件来查找行之间的最高值和最低值?

Python 3.x 如何根据pd.DataFrame中另一列中满足的条件来查找行之间的最高值和最低值?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有以下数据帧,每次运行脚本时都会生成,数据帧如下所示: df= index time value status 0 2020-11-20 20:10:00 10 X 1 2020-11-20 20:20:00 11 X 2 2020-11-20 20:45:00 9 X 3 2020-11-20 20:45:00 5 Y 4 2020-11-20 21:00:00 4

我有以下数据帧,每次运行脚本时都会生成,数据帧如下所示:

df=


index            time    value  status
0  2020-11-20 20:10:00   10        X
1  2020-11-20 20:20:00   11        X
2  2020-11-20 20:45:00   9         X 
3  2020-11-20 20:45:00   5         Y
4  2020-11-20 21:00:00   4         X
5  2020-11-20 21:05:00   2         Y
6  2020-11-20 21:15:00   4         Y
7  2020-11-20 21:20:00   9         X
8  2020-11-20 21:25:00   5         X

The desired output would be :

    index            time    value  status
    0  2020-11-20 20:20:00   11        X
    1  2020-11-20 20:45:00   5         Y
    2  2020-11-20 21:00:00   4         X
    3  2020-11-20 21:05:00   2         Y
    4  2020-11-20 21:20:00   9         X
因此,我在这里的目标是创建一个新的pd.DataFrame,它的最低值为Y,最高值为X


提前感谢所有人的帮助和支持。

您可以对状态相同的数据帧的连续值执行
groupby
,按
值对每个分组的数据帧进行排序,并根据分组数据帧的
状态
是否等于
X
Y
,保留排序数据帧的第一个或最后一个值

注意:我注意到数据框的
time
列对答案没有影响,所以我在重新创建数据框时没有包括它

import pandas as pd

## the time column doesn't matter in your problem
df = pd.DataFrame({
    'value':[10,11,9,5,4,2,4,9,5],
    'status':['X']*3+['Y']+['X']+['Y']*2+['X']*2
})

df_new = pd.DataFrame(columns=df.columns)

## perform a groupby on consecutive values
for _, g in df.groupby([(df.status != df.status.shift()).cumsum()]):
    g = g.sort_values(by='value')
    ## keep the highest value for X
    if g.status.values[0] == 'X':
        g = g.drop_duplicates(subset=['status'], keep='last')

    ## keep the lowest value for Y
    elif g.status.values[0] == 'Y':
        g = g.drop_duplicates(subset=['status'], keep='first')

    else:
        pass
    df_new = pd.concat([df_new, g])
df_new = df_new.reset_index(drop=True)
输出:

>>> df_new
  value status
0    11      X
1     5      Y
2     4      X
3     2      Y
4     9      X

给定的X,Y的最低/最高值是多少?Y的最小值为2,X的最大值为11,而状态为==到Y时Y的最小值,一旦代码在状态列上找到X,它将开始查找最大值。然后用找到的每个值创建一个新的数据框。谢谢你的帮助,你帮了我很多忙。没问题,很高兴能帮上忙!