我有一个包含大量数据的csv文件。我已经将csv作为python中的数据框。我想将每一行与其对应的行进行比较,如果第一行的值为1,第二行的值为100,则程序应将100替换为50。如果有2列包含1高于100,则值100更改为25,如果100上方有3列包含1,则100的值应为12.5,依此类推。这是csv文件的数据帧:
rule_id 51594 51668 51147 51182 51447
0 comparison1 1.0 1.0 NaN NaN NaN
1 last_comp 100.0 100.0 NaN NaN NaN
2 comparison1 NaN NaN 1.0 NaN 1.0
3 comparison2 NaN NaN 1.0 NaN 1.0
4 comparison3 NaN NaN 1.0 NaN 100.0
5 comparison4 NaN NaN 100.0 NaN NaN
结果应如下所示:
rule_id 51594 51668 51147 51182 51447
0 comparison1 1.0 1.0 NaN NaN NaN
1 last_comp 50.0 50.0 NaN NaN NaN
2 comparison1 NaN NaN 1.0 NaN 1.0
3 comparison2 NaN NaN 1.0 NaN 1.0
4 comparison3 NaN NaN 1.0 NaN 25.0
5 comparison4 NaN NaN 12.5 NaN NaN
这是代码:
for key in dtdc:
for i, value in enumerate(dtdc[key]):
n = 1
t = 100
if value == t and i > 0 and dtdc[key][i-n] == 1.0:
dtdc[key][i] = value/2
n = n+1
t = t/2
break
基本上,我在这里声明了2个变量。n的值为1,t的值为100,然后在if循环中使用它们。我不知道问题是什么。如果您可以帮助我解决问题,那就太好了。
答案 0 :(得分:1)
编辑:由于您的问题现在已更改,因此这是新答案。您可以像以前一样跟踪前一行的索引,但是可以在while循环中进行,每次减一,每次条件为真时除以一半。
for key in df:
for i, value in enumerate(df[key]):
if value == 100.0:
index = i
while index > 0 and df[key][index - 1] == 1.0:
df[key][i] = df[key][i]/2
index -= 1