找到第一个负值并使用最后一个非零值进行恢复



我有一个dataframe:

          hrs          running_hrs  
0     203.889578           24  
1     155.929832           24  
2     180.248357           24  
3     112.502220           24  
4     102.261148           24  
5      86.982634           24  
6      35.552699           24  
7      29.260349           24  
8      0.577342            24  
9     -23.297091            0  
10    -42.875767            0  
11    -77.278587            0  

我必须从HRS列中搜索第一个负值,然后用HRS列的最后一个非零值替换Running_HR。

预期输出:

          hrs          running_hrs  
0     203.889578           24  
1     155.929832           24  
2     180.248357           24  
3     112.502220           24  
4     102.261148           24  
5      86.982634           24  
6      35.552699           24  
7      29.260349           24  
8      0.577342            24  
9     -23.297091        0.577342  
10    -42.875767            0  
11    -77.278587            0  

我尝试找到负值,但选择了所有负值。

任何人都可以建议正确的方法吗?

使用lt idxmax-

找到第一个元素小于0
i = df.hrs.lt(0).idxmax()

loc-

执行索引和分配
df.loc[i, 'running_hrs'] = df.loc[i - 1, 'hrs']
df
           hrs  running_hrs
0   203.889578    24.000000
1   155.929832    24.000000
2   180.248357    24.000000
3   112.502220    24.000000
4   102.261148    24.000000
5    86.982634    24.000000
6    35.552699    24.000000
7    29.260349    24.000000
8     0.577342    24.000000
9   -23.297091     0.577342
10  -42.875767     0.000000
11  -77.278587     0.000000

如果需要,请确保i在分配之前大于0 -

if i > 0:
    df.loc[i, 'running_hrs'] = df.loc[i - 1, 'hrs']

否则,您可能会遇到索引错误。

最新更新