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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

357閲覧

Pythonでcsvファイルの処理 時間の差分を求めたい

Sarada

総合スコア4

Python 3.x

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

0グッド

0クリップ

投稿2023/01/27 14:21

前提

Pythonでcsvを処理したいです。
csvは以下のようなものだと考えてください。

No,DateTime,DataA,DataB
01,2022/01/01 01:02:03.456,A,B
02,2022/01/01 01:02:53.456,A,B
02,2022/01/01 01:03:03.456,A,B
……

実現したいこと

行いたいことは2つあります。
①DateTimeの差分をcsvに追加したいです。
上に載せたcsvを例にしますと、DateTimeの1行目に01:02:03、2行目に01:02:53と50秒後の記録がされています。
同様に3行目には01:03:43と2行目から10秒後の記録がなされています。
この差分の記録をDataBの隣に入力したいです。

なのでこの時点では以下のような形のcsv(またはDataFrame)が作成されると思います。

No,DateTime,DataA,DataB,diff
01,2022/01/01 01:02:03.456,A,B,
02,2022/01/01 01:02:53.456,A,B,50
02,2022/01/01 01:03:03.456,A,B,10
……

②更にここからflgという列をdiffの横に追加したいです。
このフラグには、先程作成したdiff列に格納されている時間の差分を判定したいです。
diffの差分を見て、前との時間の差が30秒以下であれば1を、そうでなければ0を入力したいです。

なので最終的には以下の形のcsvが欲しいです。

No,DateTime,DataA,DataB,diff,flg
01,2022/01/01 01:02:03.456,A,B,,
02,2022/01/01 01:02:53.456,A,B,50,0
02,2022/01/01 01:03:03.456,A,B,10,1
……

(diffには今は簡易的に数字のみを書いていますが、実際に出力されるデータに付いては00:00:50.000といった形になるかと思います)

該当のソースコード

Python

1df = pd.read_csv('csvのパス') 2 3df =df.set_index('DateTime') 4df.index =pd.to_datetime(df.index) 5 6df['diff'] = df.index.to_series().diff() 7df.to_csv('出力csv名')

試したこと

上のコードで自分の求めているdiffは出力できたのですが、この書き方だとindexにDateTimeが変更されてしまい、生csvとデータ順が変わってしまいます。
indexを使用しないやり方も試してみたのですが、この場合だとどうしても上手く結果を出力できません。
初歩的な質問で申し訳ありませんが回答よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1import pandas as pd 2 3df = pd.read_csv('csvのパス', parse_dates=['DateTime']) 4df['diff'] = df['DateTime'].diff().dt.total_seconds() 5df['flg'] = df['diff'].where(df['diff'].isna(), df['diff'].le(30) * 1) 6df.to_csv('output.csv', index=False)

output.csv

csv

1No,DateTime,DataA,DataB,diff,flg 21,2022-01-01 01:02:03.456,A,B,, 32,2022-01-01 01:02:53.456,A,B,50.0,0.0 42,2022-01-01 01:03:03.456,A,B,10.0,1.0

投稿2023/01/27 15:15

編集2023/01/27 15:49
melian

総合スコア19805

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

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

Sarada

2023/01/28 05:59

ありがとうございます。 無事結果を出力するができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問