考慮使用此方法:
df = pd.DataFrame(pd.date_range('2000-01-02', freq='1D', periods=15), columns=['Date'])
bins_dt = pd.date_range('2000-01-01', freq='3D', periods=6)
bins_str = bins_dt.astype(str).values
labels = ['({}, {}]'.format(bins_str[i-1], bins_str[i]) for i in range(1, len(bins_str))]
df['cat'] = pd.cut(df.Date.astype(np.int64)//10**9,
bins=bins_dt.astype(np.int64)//10**9,
labels=labels)
結果:
In [59]: df
Out[59]:
Date cat
0 2000-01-02 (2000-01-01, 2000-01-04]
1 2000-01-03 (2000-01-01, 2000-01-04]
2 2000-01-04 (2000-01-01, 2000-01-04]
3 2000-01-05 (2000-01-04, 2000-01-07]
4 2000-01-06 (2000-01-04, 2000-01-07]
5 2000-01-07 (2000-01-04, 2000-01-07]
6 2000-01-08 (2000-01-07, 2000-01-10]
7 2000-01-09 (2000-01-07, 2000-01-10]
8 2000-01-10 (2000-01-07, 2000-01-10]
9 2000-01-11 (2000-01-10, 2000-01-13]
10 2000-01-12 (2000-01-10, 2000-01-13]
11 2000-01-13 (2000-01-10, 2000-01-13]
12 2000-01-14 (2000-01-13, 2000-01-16]
13 2000-01-15 (2000-01-13, 2000-01-16]
14 2000-01-16 (2000-01-13, 2000-01-16]
In [60]: df.dtypes
Out[60]:
Date datetime64[ns]
cat category
dtype: object
說明:
df.Date.astype(np.int64)//10**9
- datetime
值轉換成UNIX紀元(時間戳 - 因爲1970-01-01 00:00:00
秒#):
In [65]: df.Date.astype(np.int64)//10**9
Out[65]:
0 946771200
1 946857600
2 946944000
3 947030400
4 947116800
5 947203200
6 947289600
7 947376000
8 947462400
9 947548800
10 947635200
11 947721600
12 947808000
13 947894400
14 947980800
Name: Date, dtype: int64
同樣會applyied到bins
:
In [66]: bins_dt.astype(np.int64)//10**9
Out[66]: Int64Index([946684800, 946944000, 947203200, 947462400, 947721600, 947980800], dtype='int64')
標籤:
In [67]: labels
Out[67]:
['(2000-01-01, 2000-01-04]',
'(2000-01-04, 2000-01-07]',
'(2000-01-07, 2000-01-10]',
'(2000-01-10, 2000-01-13]',
'(2000-01-13, 2000-01-16]']
外貌就像我需要建立一個頻率並輸入多少個週期(箱)。有一個TypeError:不能從[datetime64 [ns]]到[uint64]這樣的日期類型。除熊貓,numpy和datetime以外的任何圖書館? –
@ ArthurD.Howland,嘗試使用'np.int64'而不是'np.uint64'。不,你只需要熊貓和Numpy來完成這項任務。你的熊貓和Numpy版本是什麼? – MaxU
np.int64工作並重復結果。看起來像我的第一個成功的垃圾箱。可能需要一天的時間將其轉換爲我的設置。使用Python 3.5.2。出現我的垃圾箱是7D,我可以使用我獨特的列表長度來確定垃圾箱的數量。越來越近:) –