2017-05-03 13 views
1

1時間ごとの値を表すpandas DataFrameがあり、毎日の各値を1年間報告したいと思います。私はそれを行うための '素朴な'方法を書いています。より効率的な方法がありますか? (正常に動作しますが、多くの時間かかります)Python pandasを使用して、時間データを毎日の日付と時刻に効率的に変換するにはどうすればよいですか?

ナイーブな方法:

dfConsoFrigo = pd.read_csv("../assets/datas/refregirateur.csv", sep=';') 
dataframe = pd.DataFrame(columns=['Puissance']) 
iterator = 0 
for day in pd.date_range("01 Jan 2017 00:00", "31 Dec 2017 23:00", freq='1H'): 
    iterator = iterator % 24 
    dataframe.loc[day] = dfConsoFrigo.iloc[iterator]['Puissance'] 
    iterator += 1 

入力を(時間;値)24行:

Heure;Puissance 
00:00;48.0 
01:00;47.0 
02:00;46.0 
03:00;46.0 
04:00;45.0 
05:00;46.0 
... 
19:00;55.0 
20:00;53.0 
21:00;51.0 
22:00;50.0 
23:00;49.0 

予想される出力(8760行):

     Puissance 
2017-01-01 00:00:00   48 
2017-01-01 01:00:00   47 
2017-01-01 02:00:00   46 
2017-01-01 03:00:00   46 
2017-01-01 04:00:00   45 
... 
2017-12-31 20:00:00   53 
2017-12-31 21:00:00   51 
2017-12-31 22:00:00   50 
2017-12-31 23:00:00   49 
+2

あなたは、所望の出力を持ついくつかのデータサンプルを追加することはできますか? – jezrael

+0

入力された日付がありますか?入力が –

+0

の場合は、時間と値が1つだけです –

答えて

1

あなたがnumpy.tileを必要とするインク:

np.random.seed(10) 
df = pd.DataFrame({'Puissance':np.random.randint(100, size=24)}) 
rng = pd.date_range("01 Jan 2017 00:00", "31 Dec 2017 23:00", freq='1H') 

df = pd.DataFrame({'a':np.tile(df['Puissance'].values, 365)}, index=rng) 

print (df.head(30)) 
         a 
2017-01-01 00:00:00 9 
2017-01-01 01:00:00 15 
2017-01-01 02:00:00 64 
2017-01-01 03:00:00 28 
2017-01-01 04:00:00 89 
2017-01-01 05:00:00 93 
2017-01-01 06:00:00 29 
2017-01-01 07:00:00 8 
2017-01-01 08:00:00 73 
2017-01-01 09:00:00 0 
2017-01-01 10:00:00 40 
2017-01-01 11:00:00 36 
2017-01-01 12:00:00 16 
2017-01-01 13:00:00 11 
2017-01-01 14:00:00 54 
2017-01-01 15:00:00 88 
2017-01-01 16:00:00 62 
2017-01-01 17:00:00 33 
2017-01-01 18:00:00 72 
2017-01-01 19:00:00 78 
2017-01-01 20:00:00 49 
2017-01-01 21:00:00 51 
2017-01-01 22:00:00 54 
2017-01-01 23:00:00 77 
2017-01-02 00:00:00 9 
2017-01-02 01:00:00 15 
2017-01-02 02:00:00 64 
2017-01-02 03:00:00 28 
2017-01-02 04:00:00 89 
2017-01-02 05:00:00 93 
+0

私のコードは動作しますが、非常に遅い、それは私の問題です。 割り当てる前にインデックスを定義する.locは高速ですか? –

+0

確かに、データを整列する必要があります。データが1時間ごとに繰り返されると、sholudはうまく動作します。 – jezrael

+0

ハム私は正確に質問する必要があります、私の入力は24行のデータフレームです、私は毎年毎日繰り返すことを望みます。実際には私のデータフレームを364回繰り返すだけです。 –