前提・実現したいこと
PythonはPandasで時系列データの整理を行っております.
現在,一応付け焼き刃の手段でうまくは行っているのですが,ループを回すため処理が重たく,もっとスマートな書き方があるのでは無いかと思い質問させて頂きました.
現在**整理するために扱っているデータフレーム(以降df_01とします)**は以下の通りです.
df_01のインデックスは,「年月日時分秒」です.
Dataframe
1 1 hours prediction \ 22016-01-01 00:00:00 1429.476695 32016-01-01 01:00:00 1229.455257 42016-01-01 02:00:00 1429.212263 52016-01-01 03:00:00 1529.511699 6... 72017-01-01 04:00:00 1629.509232 82017-01-01 05:00:00 1729.304866 92017-01-01 06:00:00 1229.530628 102017-01-01 07:00:00 1329.877418 112017-01-01 08:00:00 1430.108962 122017-01-01 09:00:00 1530.085283 132017-01-01 10:00:00 1630.443224 14 15一部のみ記載しています
この時,df_01から時刻を指定し値を取得するために**別の配列(下に示し,以降df_02とします)**でデータを整理していました.
df_02のインデックスは,「年月日」までであり,「時分秒」は入っておりません.
Dataframe
1 data 22016-01-06 NaN 32016-01-11 NaN 42016-01-17 25.5 52016-01-18 9.0 62016-01-19 NaN 72016-01-23 7.0 82016-01-24 NaN 9一部のみ記載しています
さて,今回私が実現したいのは,df_02のインデックスをdf_01の抽出に使いたいということです.
具体的に,望まれる結果は以下のようになります.
Dataframe
1 1 hours prediction \ 22016-01-06 00:00:00 1429.476695 32016-01-06 01:00:00 1229.455257 42016-01-06 02:00:00 1429.212263 52016-01-06 03:00:00 1529.511699 6... 72016-01-11 04:00:00 1629.509232 82016-01-11 05:00:00 1729.304866 92016-01-11 06:00:00 1229.530628 102016-01-11 07:00:00 1329.877418 112016-01-11 08:00:00 1430.108962 122016-01-11 09:00:00 1530.085283 132016-01-11 10:00:00 1630.443224 14一部のみ記載しています
df_02で日付をみつけて,df_01でその日の24時間分のデータを抽出したいという考えです.
ところがこれがうまくいかず(重い処理しか思いつかず),「発生している問題」で表記しているようなことになってしまいます.
また,「試したこと欄」には試行錯誤の一部を記載しております.
望まれる結果を達成するために,どのような処理をすればいいでしょうか.
教えて頂ければ幸いです.
よろしくお願いいたします.
発生している問題
抽出される結果が以下のようになります.
Dataframe
1 1 hours prediction \ 22016-01-06 1429.476695 ``` 3... 4一部のみ記載しています
このように,各日の0時0分0秒のデータしか抽出されず,目的のデータフレームの全てを得られておりません.
該当のソースコード・試したこと
python
1df_01.loc[df_02.index, :]
と書きますと,上述のような結果となりました.
また,
python
1df_01.loc["2016-01-06", :]
と文字列で入力しますと,一日分のデータのみですが24時間分の出力が得られます.
そこで,現在の付け焼き刃の方法では以下のようなことをしています.
python
1SAMPLES = df_02.index.strftime('%Y-%m-%d') 2df_ans = pd.DataFrame([]) 3for idx in range(len(SAMPLES)): 4 df_ans = pd.concat([df_ans, df_01.loc[SAMPLES[idx], :]], axis=0) 5# ↑私のMarkdownの書き方が間違っているのかうまくインデントが入りません.見づらいのはご容赦ください.
これは時間が掛かり,この処理があと100回程度残っているためどうしようかなと困っております.
使用しているPython,pandasのバージョン
zsh
1% python --version 2Python 3.6.1 :: Anaconda 4.4.0 (x86_64)
python
1import pandas as pd 2print(pd.__version__) # '0.24.1'
回答1件
あなたの回答
tips
プレビュー