Pandas DataFrame:基于行的操作

时间:2019-02-20 14:26:36

标签: python pandas csv

我有一个包含大量数据的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循环中使用它们。我不知道问题是什么。如果您可以帮助我解决问题,那就太好了。

1 个答案:

答案 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