2017-12-07 13 views
0

私は、ユーティリティプロバイダからダウンロードした1年分のユーティリティデータをプロットしようとしています。データは、各行が異なる日(最上部に最新)であり、各列が1時間(11:00 AM、12:00 PM、1:00 PMなど)であるマトリクスで提供されます。私はこの2D DataFrameを1D Timeseriesに変換し、シリーズをプロットしたいと思います。2時間ごとのDataFrameから1D時系列をプロットする

.stack()を使用すると閉じることができますが、スタックされた後の日付と時刻の列から日時を作成することはできません。また、プロットすると、時間が正しく左から右にプロットされますが、日付は左から右に下がります。たとえば、25日(午前1時、午前2時、午前3時など)、24日(午前1時、午前2時、午前3時など)、23日(午前1時、午前2時、午後3時など)です。私は本当のdatetimeが作成された後にこれが修正されると確信しています。

以下のコードは小さなサンプルdfを生成しますが、実際のデータセットではすべて24時間が列であり、すべての年の日付は行です。

df=pd.DataFrame({'Date':['06/25/17','06/24/17','06/23/17'], '12:00 AM': 
[1,2,3],'1:00 AM':[4,5,6],'2:00 AM':[7,8,9],}) 
df.set_index(['Date'], inplace = True) 
df 

目的はインデックスが時系列であり、ユーティリティの使用がデータであるシリーズを持つことです。

ありがとうございました!

+0

この最終的な正しい形式はになりますデータ値で順序付けされていない時系列順: 06/23/17 12:00 3 06/23/17 1:00 6 06/23/17 2:00 9 06/24/17 12:00 2 06/24/17 1:00 5 06/24/17 2: など – TheGadgeteer

+0

私の改訂版の記事をご覧ください。最初は、インデックスをタイムスタンプに変換するのを忘れていました。データタイプが正しいと、データフレーム内の順序に関係なく、時系列順にプロットすることができます。 – dubbbdan

答えて

0

level_0のデータフレームをunstackに連結してタイムスタンプを作る必要があると思います。インデックスをタイムスタンプに設定し、余分な列を削除します。以下のように見える

df=pd.DataFrame({'Date':['06/25/17','06/24/17','06/23/17'], '12:00 AM': 
[1,2,3],'1:00 AM':[4,5,6],'2:00 AM':[7,8,9],}) 
df.set_index(['Date'], inplace = True) 

#Unstack and reset index 
df = df.unstack().reset_index() 

#concatenate timestamp and convert to datetime 
df['Timestamp'] = df['Date'] + ' '+ df['level_0'] 
df['Timestamp'] = pd.to_datetime(df['Timestamp'],format="%m/%d/%y %I:%M %p") 
df =df.sort_values(by='Timestamp') 
df = df.set_index('Timestamp') 

#drop extra columns 
df = df.drop(['Date','level_0'],axis=1) 

戻りdf

     0 
Timestamp    
2017-06-23 00:00:00 3 
2017-06-23 01:00:00 6 
2017-06-23 02:00:00 9 
2017-06-24 00:00:00 2 
2017-06-24 01:00:00 5 
2017-06-24 02:00:00 8 
2017-06-25 00:00:00 1 
2017-06-25 01:00:00 4 
2017-06-25 02:00:00 7 

その後、

df.plot() 

降伏を使用して時系列をプロットできます。 はenter image description here

+0

ありがとう!これはまさに私が望んでいたものです。 – TheGadgeteer

+0

@TheGadgeteer素晴らしい!回答を受け入れることを検討してください – dubbbdan

+0

@thegadgeteer私の修正された解決策を見てください。タイムスタンプに午前または午後が含まれていることがわかり次第、日付の正しい形式を追加しました。 – dubbbdan