我想使用下面的代碼每個組獲得最新的實例。它做我想做的,除了時間戳被轉換爲numpy.datetime並且日期被減去一天。 這似乎不是正確的行爲。這是一個錯誤還是我錯過了一些東西。大熊貓:時間戳搞砸後羣
In [37]: df
Out[37]:
ticker currency date
0 AACE NaN NaT
1 AAP US Dollar 2012-12-29 00:00:00
2 AAP US Dollar 2013-04-20 00:00:00
3 AAP US Dollar 2013-07-13 00:00:00
4 ABBEY British Pound 2012-12-31 00:00:00
5 ABBEY British Pound 2013-03-30 00:00:00
6 ABBEY British Pound 2013-06-30 00:00:00
7 ABBNVX NaN NaT
8 ABBV US Dollar 2012-12-31 00:00:00
9 ABBV US Dollar 2013-03-31 00:00:00
10 ABBV US Dollar 2013-06-30 00:00:00
In [38]: df.date[3]
Out[38]: Timestamp('2013-07-13 00:00:00', tz=None)
In [39]: df.groupby('ticker').last()
Out[39]:
currency date ticker
AACE NaN NaN
AAP US Dollar 2013-07-12T17:00:00.000000000-0700
ABBEY British Pound 2013-06-29T17:00:00.000000000-0700
ABBNVX NaN NaN
ABBV US Dollar 2013-06-29T17:00:00.000000000-0700
In [40]: df.groupby('ticker').last().date[1]
Out[40]: numpy.datetime64('2013-07-12T17:00:00.000000000-0700')
In [41]:
編輯:
我沒有原來的例子,但這裏是另一個例子複製相同的行爲。
In [57]: df
Out[57]:
ticker currency date
3227 WWW US Dollar 2013-03-23 00:00:00
3228 WWW US Dollar 2012-12-29 00:00:00
3229 WWW US Dollar 2013-06-15 00:00:00
3230 WWW US Dollar 2013-09-07 00:00:00
3231 WYLE NaN NaT
3232 YALUNI NaN NaT
3233 YKBNK NaN NaT
3234 YZCOAL NaN NaT
3235 ZACHRY NaN NaT
3236 ZAYOGR US Dollar 2013-03-31 00:00:00
3237 ZAYOGR US Dollar 2013-06-30 00:00:00
3238 ZAYOGR US Dollar 2012-12-31 00:00:00
3239 ZINC US Dollar 2013-06-30 00:00:00
3240 ZINC US Dollar 2012-12-31 00:00:00
3241 ZINC US Dollar 2013-03-31 00:00:00
In [58]: df.dtypes
Out[58]:
ticker object
currency object
date datetime64[ns]
dtype: object
In [59]: df.tail(7).groupby('ticker').last()
Out[59]:
currency date
ticker
ZACHRY NaN NaN
ZAYOGR US Dollar 2012-12-30T16:00:00.000000000-0800
ZINC US Dollar 2013-03-30T17:00:00.000000000-0700
In [60]: df.tail(6).groupby('ticker').last()
Out[60]:
currency date
ticker
ZAYOGR US Dollar 2012-12-31 00:00:00
ZINC US Dollar 2013-03-31 00:00:00
In [61]:
它看起來像時間戳的列只有當有NaT預設時纔會搞砸。
數據類型是pandas.tslib.Timestamp。如果我將時間戳轉換爲日期時間,然後執行groupby,它會正常工作。但是還不清楚爲什麼轉換是必要的?我真的不明白爲什麼類型必須是日期時間而不是時間戳,因爲groupby()。last()才起作用。謝謝。 – ezbentley
我的意思是你可以顯示你開始的df,例如顯示df.head()和df.dtypes,還在日期列中打印元素,例如, df.ix [0, '日期']。我認爲你使用的時區可能無法正確工作(可能是一個錯誤) – Jeff