2015-09-11 3 views
1

у меня есть 20 минут наблюдаемых данных, в 5 минутах бункеров следующим образом:последнего значения переносится в пандах

bin var1 var2 var3 var4 
    5 -76.30 71.96 557.79 0.06 
    10 -61.23 78.14 600.69 0.09 
    15 -54.36 73.63 630.71 0.03 
    20 -12.41 71.46 661.19 0.08 

мне нужно моделировать в течение часа данных пути осуществления последнего наблюдаемого значения вперед и получить следующий вывод:

bin var1 var2 var3 var4 
5 -76.30 71.96 557.79 0.06 
10 -61.23 78.14 600.69 0.03 
15 -54.36 73.63 630.71 0.09 
20 -12.41 71.46 661.19 0.08 
25 -12.41 71.46 661.19 0.08 
30 -12.41 71.46 661.19 0.08 
35 -12.41 71.46 661.19 0.08 
40 -12.41 71.46 661.19 0.08 
45 -12.41 71.46 661.19 0.08 
50 -12.41 71.46 661.19 0.08 
55 -12.41 71.46 661.19 0.08 
60 -12.41 71.46 661.19 0.08 

, что это лучший способ, чтобы закодировать это в кадре данных панд? пожалуйста & спасибо.

+0

Не очень интересная «модель»! – LondonRob

ответ

0

Вы можете добавить строку i (в вашем случае, i == 3) j раз (j == 8) с

bin = df.iloc[i].copy() # to avoid modifying the original dataframe 
for _ in range(j): 
    bin['bin'] += 5 
    df = df.append(bin, ignore_index=True) 

df относится к вашему pandas.DataFrame объекта.

+0

спасибо за это! он работал, за исключением новых значений в столбце _bin_, все из которых являются «20». Предлагаемое ниже предложение chrisb, похоже, позаботится об этой проблеме. – pyne

+0

Я отредактировал свое сообщение, чтобы исправить столбец _bin_. Версия [@ chrisb's] (http://stackoverflow.com/users/3657742/chrisb) действительно превосходит по производительности. Если, однако, единственным узким местом является ваш уровень комфорта с помощью python, моя версия может быть легче воспроизвести в другом контексте. –

+0

отлично! Благодарю. попробуем оба и посмотрим, какая из них лучше всего подходит для моей цели - тем более, что мне нужно переиндексироваться с предложением @ chrisb, чтобы построить график против исходных данных. – pyne

1

Хотя вы можете добавить к DataFrame, это относительно неэффективная операция, так как каждый шаг берет копию. reindex обеспечивает простой способ выровнять данные с новым индексом, затем вы можете перенаправить значения с помощью метода fillna.

In [31]: df = df.set_index('bin') 
    ...: df = df.reindex(range(5, 65, 5)).fillna(method='ffill') 


In [32]: df 
Out[32]: 
     var1 var2 var3 var4 
bin        
5 -76.30 71.96 557.79 0.06 
10 -61.23 78.14 600.69 0.09 
15 -54.36 73.63 630.71 0.03 
20 -12.41 71.46 661.19 0.08 
25 -12.41 71.46 661.19 0.08 
30 -12.41 71.46 661.19 0.08 
35 -12.41 71.46 661.19 0.08 
40 -12.41 71.46 661.19 0.08 
45 -12.41 71.46 661.19 0.08 
50 -12.41 71.46 661.19 0.08 
55 -12.41 71.46 661.19 0.08 
60 -12.41 71.46 661.19 0.08 
+0

это отлично работает, спасибо! – pyne

+0

любая идея, как я могу положить _bin_ обратно в нормальный столбец и установить новый индекс? это решило мою первоначальную проблему, но теперь это влияет на построение графика :( – pyne

+0

'df = df.reset_index()' – chrisb