2017-05-10 39 views
1

datetime列の中央値をdatetime形式で計算して戻す方法はありますか? pythonでdatetime64 [ns]形式の列の中央値を計算します。以下は、カラムへのサンプルです:パンダdatetime64列の中央値

df['date'].head() 

0 2017-05-08 13:25:13.342 
1 2017-05-08 16:37:45.545 
2 2017-01-12 11:08:04.021 
3 2016-12-01 09:06:29.912 
4 2016-06-08 03:16:40.422 

名:最新性、DTYPE:datetime64 [NS]

私の目的は、上記の日付列と同じ日時形式で中央値を持つことです。

np.arrayする変換しようとしました:

median_ = np.median(np.array(df['date'])) 

しかし、それはエラーがスローされます:

TypeError: ufunc add cannot use operands with types dtype('<M8[ns]') and dtype('<M8[ns]') 

INT64への変換、その後動作しない日時に戻り形式の中央値との試みを計算

df['date'].astype('int64').median().astype('datetime64[ns]') 

答えて

2

どのようにちょうど中間の値をとることについてはどうですか?

dates = list(df.sort('date')['date']) 
print dates[len(dates)//2] 

テーブルをソートすると、行をスキップすることもできます。

+0

ありがとう@kabanus。これはうまくいく。列の長さを並べ替えて使用することは私には起こりませんでした。 –

+0

@ T-Jay喜んでお手伝いします。私が他者の利益のために良い気分にさせるために受け入れることを忘れないでください。 – kabanus

0

あなたは、近くにあるmedian()それはint最初になるように変換するので、floatを返す:

import math 

median = math.floor(df['date'].astype('int64').median()) 

その後intdatetime64に日付を表​​す変換:

result = np.datetime64(median, "ns") #unit: nanosecond 
0

ます。また、試すことができますデータフレームの長さが偶数である場合、中央値と全く同じではないが、いくつかの変換を伴う分位数(0.5)。これで十分であるかもしれないが、

df['date'].astype('datetime64[ns]').quantile(.5) 
関連する問題