2017-02-14 56 views
0

我有一個數據幀「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(). 

有沒有人對如何解決這個想法?非常感謝

+0

在你的代碼中有很多問題,不知道從哪裏開始。你在尋找什麼東西或者只是有一個解決方案並擺脫你的問題? – Boud

+0

這實際上是我需要擺脫的一個真正的問題,希望對任何人來說都不是太多工作 – WhelanG

+0

然後我會建議你用簡單的英語來描述你的後續部分「由一個整數」,因爲你的代碼沒有幫助除以零,你就會追溯到 – Boud

回答

0

下面將函數f應用於df中的每一行。除數從2開始,在行['B']>行['C']時遞增。

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 
+0

非常感謝 – WhelanG