1. ホーム
  2. python

[解決済み] Pandasの2つのカラムの時差を計算する(時・分)。

2022-07-17 14:26:40

質問

2つのカラムがあります。 fromdatetodate というように、データフレームで表現します。

import pandas as pd

data = {'todate': [pd.Timestamp('2014-01-24 13:03:12.050000'), pd.Timestamp('2014-01-27 11:57:18.240000'), pd.Timestamp('2014-01-23 10:07:47.660000')],
        'fromdate': [pd.Timestamp('2014-01-26 23:41:21.870000'), pd.Timestamp('2014-01-27 15:38:22.540000'), pd.Timestamp('2014-01-23 18:50:41.420000')]}

df = pd.DataFrame(data)

新しいカラムを追加しています。 diff を使って、2つの日付の差を求めます。

df['diff'] = df['fromdate'] - df['todate']

を取得します。 diff というカラムがありますが、このカラムには days を含む、24時間以上ある場合。

                   todate                fromdate                   diff
0 2014-01-24 13:03:12.050 2014-01-26 23:41:21.870 2 days 10:38:09.820000
1 2014-01-27 11:57:18.240 2014-01-27 15:38:22.540 0 days 03:41:04.300000
2 2014-01-23 10:07:47.660 2014-01-23 18:50:41.420 0 days 08:42:53.760000

結果を時間と分だけに変換する(つまり、日を時間に変換する)にはどうすればよいですか?

どのように解決するのですか?

Pandasのタイムスタンプの差分は、datetime.timedeltaオブジェクトを返します。これは、以下のように *as_type* メソッドを使用することで簡単に時間に変換することができます。

import pandas
df = pandas.DataFrame(columns=['to','fr','ans'])
df.to = [pandas.Timestamp('2014-01-24 13:03:12.050000'), pandas.Timestamp('2014-01-27 11:57:18.240000'), pandas.Timestamp('2014-01-23 10:07:47.660000')]
df.fr = [pandas.Timestamp('2014-01-26 23:41:21.870000'), pandas.Timestamp('2014-01-27 15:38:22.540000'), pandas.Timestamp('2014-01-23 18:50:41.420000')]
(df.fr-df.to).astype('timedelta64[h]')

を降ろす。

0    58
1     3
2     8
dtype: float64