根据for循环中的条件对行进行归一化

时间:2019-02-12 22:46:19

标签: python

我正在尝试根据以下条件对规范化csv文件中列中的每个值进行规范化:将规范化应用于第一次重复(根据规则)后的某种重启循环后的每一行。

我尝试了一些for / while循环,但是我对此一无所知。

我尝试过:

temp_var = 0
 for row in csvfile : 
   if row[1] == row[2] :
       temp_var += row[3]
         row[3] = 100
        while row[1] == row[2] :
           continue

更准确地说,当row [1] = row [2]我想传递row [3] = 100时,我有些“重复”,然后我想像(下一行的row [3] * 100 / row [ 3]当前行的真值),直到下一个“重复”重复为止的每一行。

示例:

a | b | c
a   a   400
b   d   200
c   x   300
d   d   50
e   z   5
f    e   15
g   p   5000

所以有两个重复的aa / dd 我想要:

a a 100
b d 200 * 100 /400
c x 300 * 100 / 400
d d 100
e z 5 * 100 / 50
f e 15 * 100 / 50
g p 5000 * 100 / 50

1 个答案:

答案 0 :(得分:0)

类似:

last_dup = None
res = []
for row in csvfile:
    if row[1] == row[2]:
        last_dup = row[3]
        row[3] = 100
    elif last_dup:
       row[3] *= 100/last_dup
    res.append(row)

主题入门的其他示例:

last_dup = None
res = []
src = [
    ["a", "a", 400],
    ["b", "d", 200],
    ["c", "x", 300],
    ["d", "d", 50],
    ["e", "z", 5],
    ["f", "e", 15],
    ["g", "p", 5000],
]
for row in src:
    if row[0] == row[1]:
        last_dup = row[2]
        row[2] = 100
    elif last_dup:
        row[2] *= 100 / last_dup
    res.append(row)
print(res)
[['a', 'a', 100], ['b', 'd', 50.0], ['c', 'x', 75.0], ['d', 'd', 100], ['e', 'z', 10.0], ['f', 'e', 30.0], ['g', 'p', 10000.0]]