2016-01-22 4 views
0

Я пытаюсь создать фрейм данных, который добавляет 1 к предыдущей строке в столбце, пока не будет выполнено условие. В этом случае, я хочу продолжать добавлять строки до столбца «AGE» = 100.Добавить (и рассчитать) строки в dataframe до тех пор, пока не будет выполнено условие:

import pandas as pd 
import numpy as np 


RP = {'AGE' : pd.Series([10]), 
     'SI' : pd.Series([60])} 

RPdata = pd.DataFrame(RP) 


i = RPdata.tail(1)['AGE'] 

RPdata2 = pd.DataFrame() 

while [i < 100]: 
    RPdata2['AGE'] = i + 1 

    RPdata2['SI'] = RPdata.tail(1)['SI']  

    RPdata = pd.concat([RPdata, RPdata2], axis = 0) 
    break 

print RPdata 

Результаты

Age SI 
0 10  60 
0 11  60 

Я понимаю, что заявление перерыв мешает несколько итераций, но цикл, как представляется, без него.

Я пытаюсь достичь:

Age SI 
0 10  60 
0 11  60 
0 12  60 
0 13  60 
0 14  60 
. .  60 
0 100  60 

Есть ли способ сделать это с помощью цикла в то время? Должен ли я вместо этого использовать решение for loop?

ответ

0

Возможно, возникнут другие проблемы, но вы получите бесконечный цикл с while [i < 100]:, так как непустой список всегда будет оцениваться как True. Измените это на while (i < 100): (необязательно parens) и удалите свой оператор break, который заставляет только одну итерацию.

+0

Спасибо Randy C. Я дал ему попробовать, уступая .. ValueError: Значение истины серии неоднозначно, используйте a.empty, a.bool(), a.item(), a.any(), или a.all(). Я добавил [], чтобы избежать этого. Я попробовал ([i <100]), но не повезло. (Просто бесконечный цикл, как вы сказали). – kharn

+0

'i = RPdata.tail (1) ['AGE']' инициализирует i как pd.Series с одним значением в нем. Вы можете сделать 'i = RPdata ['AGE']. Iloc [-1]', чтобы вместо этого получить значение 10. –

+0

Прошу прощения, я не знаю, как правильно форматировать результаты печати в разделе комментариев. Возраст не читается как 11, как должно, но я = = 10. – kharn