我有一个数据框:
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
我尝试找到负值但选择了所有负值。
有人可以建议正确的方法吗?
答案 0 :(得分:1)
使用lt
+ idxmax
-
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']
否则,您可能会遇到索引错误。