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() を組み合わせれば、日付の前後関係に関わらず常に正の差分を得られるため、経過日数の集計や期間分析などに幅広く活用できます。
-
Python・PandasでDataFrameを日数間隔でグループ化する方法を解説
PandasのDataFrameを日付単位でグループ化するには、groupby()メソッドとpd.Grouper()を組み合わせて使用します。Grouperのkey引数でグループ化の基準となる日付列を指定し、freq引数で間隔(頻度)を設定します。本記事では、車両販売記録のデータを例に、7日間隔でデータをグループ化し、登録価格(Reg_Price)の合計を算出する方法を紹介します。freq引数による日数間隔の指定方法Grouperメソッドのfreqには、日数間隔を表す文字列を指定します。たとえば7Dと設定すると、日付列の最初の日付から最後の日付まで、7日ごとの区切りでデータがグループ化されます
-
【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を作