pandas 在连续运行结束后,保留先前的最大值

oknrviil  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(76)

这是我的博客:

import pandas as pd 

df = pd.DataFrame(
    {
        'a': [110, 115, 112, 180, 150, 175, 160, 145, 200, 205, 208, 203, 206, 207, 208, 209, 210, 215],
        'b': [1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1],
    }
)

字符串
这是我想要的输出,我想创建列c

a  b    c
0   110  1  110
1   115  1  115
2   112  0  115
3   180  1  180
4   150  0  180
5   175  1  180
6   160  0  180
7   145  0  180
8   200  1  200
9   205  1  205
10  208  1  208
11  203  0  208
12  206  1  208
13  207  1  208
14  208  1  208
15  209  1  209
16  210  1  210
17  215  1  215


df.a > df.a.shift(1)b为1时,否则为0。
所需步骤:
a)找出b中1的条纹结束的地方。
B)保持条纹的最大值。
c)将该值放入c中,直到在a中找到更大的值。
例如在b中找到180:
a)行3具有为1的条纹。
B)条纹的最大值为180。
c)df.c = 180,直到在a中找到更大的值。在这种情况下,在行8处为200。
这是不容易阐述的问题。也许我用错误的词描述了这个问题。所以如果有任何问题,请随时在评论中提问。
如果你能引入一种内置的方法或者一种干净的方法来创建列b,我真的很感激。
这是我曾经尝试过的方法,但我觉得这不是一个正确的方法。

df['streak'] = df['b'].ne(df['b'].shift()).cumsum()
df['max'] = df.groupby('streak')['a'].max()

mzillmmw

mzillmmw1#

你只需要cummax

df['c'] = df['a'].cummax()

字符串
输出量:

a  b    c
0   110  1  110
1   115  1  115
2   112  0  115
3   180  1  180
4   150  0  180
5   175  1  180
6   160  0  180
7   145  0  180
8   200  1  200
9   205  1  205
10  208  1  208
11  203  0  208
12  206  1  208
13  207  1  208
14  208  1  208
15  209  1  209
16  210  1  210
17  215  1  215

相关问题