簡體   English   中英

如何獲得連續條件的最大值為真?

[英]How to get the maximum value of a continuous condition being true?

TRUE_MAX列是如何計算的?

輸入:

import pandas as pd
A=[28,30,15,25,24,13,31,19,20,11,19,21]
COND=[False,True,True,True,False,False,True,True,True,False,True,True]
df=pd.DataFrame({'A':A,'COND':COND})

預計 Output

    A   COND    TRUE_MAX
0   28  FALSE   
1   30  TRUE    30
2   15  TRUE    30
3   25  TRUE    30
4   24  FALSE   
5   13  FALSE   
6   31  TRUE    31
7   19  TRUE    31
8   20  TRUE    31
9   11  FALSE   
10  19  TRUE    21
11  21  TRUE    21  

您可以嘗試如下:

import pandas as pd
A=[28,30,15,25,24,13,31,19,20,11,19,21]
COND=[False,True,True,True,False,False,True,True,True,False,True,True]
df=pd.DataFrame({'A':A,'COND':COND})

# splitting your data in groups: 1 through to 6
sequences = (df.COND != df.COND.shift()).cumsum()

# use only groups where df.COND == True and for each group get max in df.A
max_vals = df[df.COND].groupby(sequences)['A'].transform(max)

# assign to orig df
df['TRUE_MAX'] = max_vals
print(df)

     A   COND  TRUE_MAX
0   28  False       NaN
1   30   True      30.0
2   15   True      30.0
3   25   True      30.0
4   24  False       NaN
5   13  False       NaN
6   31   True      31.0
7   19   True      31.0
8   20   True      31.0
9   11  False       NaN
10  19   True      21.0
11  21   True      21.0

你可以表達你的想法

df['TRUE_MAX'] = df['A'][df.COND].cummax().fillna(method='ffill')

其中df['A']取列Adf['A'][df.COND] select 列COND為真的行, cummax為您提供該系列的運行最大值。

當您將其分配給新列時,它會將NaN分配給丟失的行(其中COND為假)。

然后您可以根據需要使用fillna獲取dataframe。

final = df.fillna('')

或者對我來說更有意義的東西,

final = df.fillna(method='ffill')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM