pandas 将column的值更改为同一列中它上面的最大值

0md85ypi  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(94)

这是我的 Dataframe :

df = pd.DataFrame({'a': [100, 103, 101, np.nan, 105, 107, 100]})

这就是我想要的输出结果:

a    b
0  100.0    100
1  103.0    103
2  101.0    103
3    NaN    103
4  105.0    105
5  107.0    107
6  100.0    107

我想创建列b,它接受列a的值,并将它们替换为列顶部的最大值。
例如,当a中有103时,我想将所有值更改为103,直到a列中有更大的数字,这就是为什么第2行和第3行更改为103,并且由于第4行中有大于103的数字,我想将其放入b列中,直到a列中有更大的数字。
我在stackoverflow上试过几个帖子,其中一个是answer,但是我还是不知道怎么做。

oogrdqng

oogrdqng1#

使用Series.cummax,并将之前非NaN的缺失值替换为ffill

df = pd.DataFrame({'a': [100, 103, 101, np.nan, 105, 107, 100]})

df['b'] = df['a'].ffill().cummax().astype(int)
#alternative
#df['b'] = df['a'].ffill(downcast='int').cummax()
print (df)
       a    b
0  100.0  100
1  103.0  103
2  101.0  103
3    NaN  103
4  105.0  105
5  107.0  107
6  100.0  107

如果真实的数据中可能,第一个值为NaN

df = pd.DataFrame({'a': [np.nan, 103, 101, np.nan, 105, 107, 100]})

df['b'] = df['a'].ffill().cummax().astype('Int64')
print (df)
       a     b
0    NaN  <NA>
1  103.0   103
2  101.0   103
3    NaN   103
4  105.0   105
5  107.0   107
6  100.0   107

相关问题