web-dev-qa-db-ja.com

Pandas DataFrameの2つの列間の時差と時差を計算する

データフレームの日付と日付の2つの列があります

を使用して2つの日付の違いを見つけるために新しい列の差分を追加しようとすると

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

24時間を超えると、diff列を数日で取得します。

2014-01-24 13:03:12.050000,2014-01-26 23:41:21.870000,"2 days, 10:38:09.820000"
2014-01-27 11:57:18.240000,2014-01-27 15:38:22.540000,03:41:04.300000
2014-01-23 10:07:47.660000,2014-01-23 18:50:41.420000,08:42:53.760000

日と秒を無視して、時間と分だけで結果を変換するにはどうすればよいですか。

49
sbalajis

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
79
nitin

上記の.astype()ソリューションが役に立たなかったので、これは私を怒らせました。しかし、私は別の方法を見つけました。タイミングを決めていませんが、他の人にとってはうまくいくかもしれません:

t1 = pd.to_datetime('1/1/2015 01:00')
t2 = pd.to_datetime('1/1/2015 03:30')

print pd.Timedelta(t2 - t1).seconds / 3600.0

...何時間も必要な場合。または:

print pd.Timedelta(t2 - t1).seconds / 60.0

...分が必要な場合。

30
elPastor