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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

452閲覧

pythonで日付の計算を行い、その結果から条件式を書きたい。

high111

総合スコア10

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/03 12:02

前提・実現したいこと

Pythonで日付の差をとって、その差の値で条件分けをしたい。

発生している問題・エラーメッセージ

不連続な日データを1年分取り扱っています。ある日のデータとその1日前のデータの差をとりたいと思っているのですが、扱っているデータファイルが365日毎日のデータを持っているわけではなく虫食い状態のデータのため、普通に引き算をすると引き算の結果が日変化ではなく2~3日後の変化とかになってしまいます。 (例:2019年1月10日~1月20日のデータを使用するとしたとき、データが十分なら(2019年1月20日の値)ー(2019年1月19日の値)、(2019年1月19日の値)ー(2019年1月18日の値)、(2019年1月18日の値)ー(2019年1月17日の値)、…、(2019年1月11日の値)ー(2019年1月10日の値)のようにして一日ごとの変化を見ていきたいのですが、2019年1月13日と2019年1月18日のデータが欠損しており(2019年1月14日ー2019年1月12日=2日、2019年1月19日ー2019年1月17日=2日となってしまい)純粋な日変化を求められない。) そこで、A-B=1日(A,B:日付)となるかA-B≠1日で場合分けをして、差が1日の場合は値の引き算を行い、差が1日でない日は引き算をスキップするというものを組みたいと考えています。

該当のソースコード

mtori=pd.read_csv('mtori2019.csv',header=None,names='Date','x','y','z','lat','lon','Heighit'),index_col=[],parse_dates=True)
print(mtori)
mtori.dtypes

Date x y ... lat lon Heighit

0 2019 01 01 -5227187.526 2551881.207 ... 24.290097 153.978651 35.626594
1 2019 01 02 -5227187.533 2551881.215 ... 24.290097 153.978651 35.638448
2 2019 01 03 -5227187.522 2551881.210 ... 24.290097 153.978651 35.627303
3 2019 01 04 -5227187.527 2551881.215 ... 24.290097 153.978651 35.637605
4 2019 01 05 -5227187.540 2551881.230 ... 24.290097 153.978650 35.658736
.. ... ... ... ... ... ... ...
358 2019 12 27 -5227187.477 2551881.232 ... 24.290097 153.978650 35.596742
359 2019 12 28 -5227187.456 2551881.227 ... 24.290097 153.978650 35.577415
360 2019 12 29 -5227187.466 2551881.231 ... 24.290097 153.978650 35.590249
361 2019 12 30 -5227187.458 2551881.228 ... 24.290097 153.978650 35.578464
362 2019 12 31 -5227187.449 2551881.237 ... 24.290097 153.978650 35.575801

[363 rows x 7 columns]

↑'Date'の引き算の結果から、'X','y'...の引き算を判定するコードを組みたいです。

試したこと

補足情報(FW/ツールのバージョンなど)

pythonを使用しています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下でできます。

  1. Timestamp 型になっていなければ、to_datetime() で Timestamp 型にする
  2. pandas.DataFrame.diff() で差分をとる
  3. Timestamp 同士の差分は Timedelta 型になるので、pd.Timedelta("1D") かどうかを比較することで、差が1日かどうかを判定する。

python

1import pandas as pd 2 3df = pd.DataFrame( 4 { 5 "Date": [ 6 "20190102", 7 "20190103", 8 "20190105", 9 "20190106", 10 "20190107", 11 "20190109", 12 "20190112", 13 "20190113", 14 ], 15 "Value": [1, 3, 2, 4, 5, 8, 9, 5], 16 } 17) 18df["Date"] = pd.to_datetime(df["Date"]) 19print(df)
DateValue
02019-01-02 00:00:001
12019-01-03 00:00:003
22019-01-05 00:00:002
32019-01-06 00:00:004
42019-01-07 00:00:005
52019-01-09 00:00:008
62019-01-12 00:00:009
72019-01-13 00:00:005

python

1diff = df.diff().shift(-1) 2df["Diff"] = diff["Value"][diff["Date"] == pd.Timedelta("1D")] 3print(df)
DateValueDiff
02019-01-02 00:00:0012
12019-01-03 00:00:003nan
22019-01-05 00:00:0022
32019-01-06 00:00:0041
42019-01-07 00:00:005nan
52019-01-09 00:00:008nan
62019-01-12 00:00:009-4
72019-01-13 00:00:005nan

投稿2020/08/03 12:33

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

high111

2020/08/05 09:11

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問