Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python Pandasで2つのタイムスタンプの差を計算する方法

PythonのPandasライブラリでは、インデックス演算子(角括弧 [])を使うことで、2つのタイムスタンプ列の差を簡単に求められます。タイムスタンプ同士の差を計算する場合は、結果が負の値にならないよう abs() 関数を併用するのがポイントです。

この記事では、「購入日」と「整備日」という2つの日付列を持つデータを例に、その差(経過日数)を求める手順を解説します。

1. 必要なライブラリをインポートする

まずはPandasをインポートします。

import pandas as pd

2. サンプルのDataFrameを作成する

次に、3つの列(車種・購入日・整備日)を持つDataFrameを作成します。日付は pd.Timestamp() で指定します。

dataFrame = pd.DataFrame(
   {
      "Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW"],

      "Date_of_Purchase": [
         pd.Timestamp("2021-06-10"),
         pd.Timestamp("2021-07-11"),
         pd.Timestamp("2021-06-25"),
         pd.Timestamp("2021-06-29"),
         pd.Timestamp("2021-03-20"),
      ],
      "Date_of_Service": [
         pd.Timestamp("2021-11-10"),
         pd.Timestamp("2021-12-11"),
         pd.Timestamp("2021-11-25"),
         pd.Timestamp("2021-11-29"),
         pd.Timestamp("2021-08-20"),
      ]
   })

3. タイムスタンプの差を計算する

2つの日付列の差は、以下のようにインデックス演算子で各列を参照し、引き算を行うだけで求められます。abs() を使うことで、常に正の値(絶対値)として差分を取得できます。

timestamp_diff = abs(dataFrame['Date_of_Purchase'] - dataFrame['Date_of_Service'])

完全なコード例

ここまでの手順をまとめたコード全体は以下の通りです。

import pandas as pd

# 3つの列を持つDataFrameを作成
dataFrame = pd.DataFrame(
   {
      "Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW"],

      "Date_of_Purchase": [
         pd.Timestamp("2021-06-10"),
         pd.Timestamp("2021-07-11"),
         pd.Timestamp("2021-06-25"),
         pd.Timestamp("2021-06-29"),
         pd.Timestamp("2021-03-20"),
      ],
      "Date_of_Service": [
         pd.Timestamp("2021-11-10"),
         pd.Timestamp("2021-12-11"),
         pd.Timestamp("2021-11-25"),
         pd.Timestamp("2021-11-29"),
         pd.Timestamp("2021-08-20"),
      ]
   })

print("DataFrame...\n", dataFrame)

# タイムスタンプの差を計算
timestamp_diff = abs(dataFrame['Date_of_Purchase'] - dataFrame['Date_of_Service'])
print("\n2つのタイムスタンプの差:\n", timestamp_diff)

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame...
        Car   Date_of_Purchase   Date_of_Service
0      Audi          2021-06-10        2021-11-10
1     Lexus          2021-07-11        2021-12-11
2     Tesla          2021-06-25        2021-11-25
3  Mercedes          2021-06-29        2021-11-29
4       BMW          2021-03-20        2021-08-20

2つのタイムスタンプの差:
0   153 days
1   153 days
2   153 days
3   153 days
4   153 days
dtype: timedelta64[ns]

まとめ

Pandasでは、DataFrame['列名A'] - DataFrame['列名B'] のように列同士を直接引き算するだけで、タイムスタンプの差を timedelta64[ns] 型として取得できます。さらに abs() を組み合わせれば、日付の前後関係に関わらず常に正の差分を得られるため、経過日数の集計や期間分析などに幅広く活用できます。

  1. Python・PandasでDataFrameを日数間隔でグループ化する方法を解説

    PandasのDataFrameを日付単位でグループ化するには、groupby()メソッドとpd.Grouper()を組み合わせて使用します。Grouperのkey引数でグループ化の基準となる日付列を指定し、freq引数で間隔(頻度)を設定します。本記事では、車両販売記録のデータを例に、7日間隔でデータをグループ化し、登録価格(Reg_Price)の合計を算出する方法を紹介します。freq引数による日数間隔の指定方法Grouperメソッドのfreqには、日数間隔を表す文字列を指定します。たとえば7Dと設定すると、日付列の最初の日付から最後の日付まで、7日ごとの区切りでデータがグループ化されます

  2. 【Python】PandasでDataFrameを月ごとにグループ化して集計する方法

    Pandasではgroupby()メソッドとpd.Grouper()を組み合わせることで、日付データを持つDataFrameを簡単に月ごとにグループ化できます。本記事では、車の販売記録を例に、月単位でデータをまとめ、登録価格(Reg_Price)の合計を算出する方法を解説します。 サンプルとなるDataFrameを作成する まずは、「Car(車名)」「Date_of_Purchase(購入日)」「Reg_Price(登録価格)」の3つの列を持つDataFrameを用意します。 import pandas as pd # Date_of_Purchase(購入日)列を含むDataFrameを作