2017-02-14 9 views
0

У меня есть dataframe «DF», и я хотел бы изменить значение столбца, если его значение ниже по сравнению с теми, в другом столбце, поэтому у меня есть:Изменения столбца в панде dataframe с петлей

   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']> row ['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