使用循环更改pandas数据框中的列

时间:2017-02-14 19:25:47

标签: python pandas dataframe while-loop

我有一个数据框" df"如果列的值比另一列中的值低,我想更改列的值,所以我有:

              A      B       C     
2017-01-01   10     200     24
2017-01-02   20     300     28
2017-01-03   30     400     29
2017-01-04   40     500     512
2017-01-05   50     600     680
2017-01-06   60     700     999
   ...       ..      ..     ..
2017-01-31   100    1200    1400

我的目标是:每当B的元素高于C的元素(在同一行上)时,B将被除以整数,直到B中的值低于C中的值。

我尝试使用while循环:

while df['C']<df['B']:
    for i in range (0,len(df)-1):
        for k in range(0,10000):
            df[i]['B']=df[i]['B']/k

这不起作用,我收到以下错误消息:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

有没有人知道如何解决这个问题?非常感谢你

1 个答案:

答案 0 :(得分:0)

以下将函数f应用于df中的每一行。除数从2开始并递增,而行[&#39; B&#39;]&gt;行[&#39; C&#39]。

def f(row):
    divisor = 2
    while row['B'] > row['C']:
        row['B'] = row['B'] / divisor
        divisor += 1
    return row

df.apply(f, axis=1)

print(df)
     B    C
0    8   24
1   12   28
2   16   29
3  500  512
4  600  680
5  700  999