找到第一个负值并用最后的非零值重新调整?

时间:2017-12-20 11:49:02

标签: python pandas 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列中搜索第一个负值,并将running_hrs替换为hrs列的最后一个非零值。

预期产出:

          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  

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

有人可以建议正确的方法吗?

1 个答案:

答案 0 :(得分:1)

使用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']

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