这是我的博客:
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()
型
1条答案
按热度按时间mzillmmw1#
你只需要
cummax
:字符串
输出量:
型