質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

解決済

欠損のある時系列データ

ot24
ot24

総合スコア4

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

2回答

0評価

0クリップ

225閲覧

投稿2022/04/24 15:26

前提

python pandas にて時系列の処理を行うにあたり、ある期間の欠損のあるデータを一日毎のデータとしたい、また、あるカラムのデータの順に並ぶようにしたいです。

実現したいこと

以下のように、現在のDataframeから欲しいDataframeのようにある決めた期間(今回ですと2000/1/1-2000/1/10)の1日ごとのデータにし、現在のDataFrameのs_1の順に並ぶようにしたいです。また、s_2,s_3はs_1の値であらかじめ決まっているものとして、欲しいDataframeへは欠損値とせず値を引き継ぎたいと考えています。

現在のDataframe date,s_1,s_2,s_3,v_1,v_2 2000-01-03,A,3,8,0.6,1.1 2000-01-05,A,3,8,5.0,1.5 2000-01-06,A,3,8,3.1,1.7 2000-01-07,A,3,8,6.5,1.5 2000-01-01,B,5,2,5.9,1.3 2000-01-02,B,5,2,5.4,1.4 2000-01-04,B,5,2,5.6,1.3 2000-01-09,B,5,2,5.4,1.2 欲しいDataframe date,s_1,s_2,s_3,v_1,v_2 2000-01-01,A,3,8,NA,NA 2000-01-02,A,3,8,NA,NA 2000-01-03,A,3,8,0.6,1.1 2000-01-04,A,3,8,NA,NA 2000-01-05,A,3,8,5.0,1.5 2000-01-06,A,3,8,3.1,1.7 2000-01-07,A,3,8,6.5,1.5 2000-01-08,A,3,8,NA,NA 2000-01-09,A,3,8,NA,NA 2000-01-10,A,3,8,NA,NA 2000-01-01,B,5,2,5.9,1.3 2000-01-02,B,5,2,5.4,1.4 2000-01-03,B,5,2,NA,NA 2000-01-04,B,5,2,5.6,1.3 2000-01-05,B,5,2,NA,NA 2000-01-06,B,5,2,NA,NA 2000-01-07,B,5,2,NA,NA 2000-01-08,B,5,2,NA,nA 2000-01-09,B,5,2,5.4,1.2 2000-01-10,B,5,2,NA,NA

試したこと

以下が参考になるかと思いましたが、データの期間が元のデータの範囲に拠ってしまう点、また、引き継ぐ内容も"source"の一列だけで、今回のように複数(s_1,s_2,s_3)引き継ぐにはどのようにすべきかまで至りませんでした。

import io from textwrap import dedent import pandas as pd csv_data = dedent( """ date,source,value 2000-01-01,A,0.66691 2000-02-01,A,5.04412 2000-03-01,A,3.15062 2000-05-01,A,6.57241 2000-01-01,B,95.9277 2000-03-01,B,85.4801 2000-04-01,B,85.6996 2000-05-01,B,55.4857 """ ) df = pd.read_csv(io.StringIO(csv_data), index_col="date", parse_dates=True) # あとで順番を戻せるよう元々の列名リストを記憶しておく orig_colnames = [str(c) for c in df.columns] # source ごとに欠損日時のデータを NaN で埋める dfs = [] sources = df["source"].unique() for source in sources: # その source の時系列データだけを取り出す tmp = df[df["source"] == source].drop(columns="source") # 欠損行を補完 tmp = tmp.resample("D").asfreq() # あとで結合するために結果を記録 tmp["source"] = source dfs.append(tmp) # source ごとに欠損行を補完したデータフレーム群を結合 df = pd.concat(dfs) # 列の順番を元に戻す df = df.reindex(columns=orig_colnames) print(df)

リンク内容

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。