2016-10-04 89 views
2

我有兩列的數據幀:ts(時間戳)和n(號碼)熊貓上timestap表樞轉返回意想不到的結果

時間戳開始在2016-07-15

In [1]: d.head() 
Out[1]: 
         ts n 
0 2016-07-15 00:04:09.444 12 
1 2016-07-15 00:05:01.633 12 
2 2016-07-15 00:05:03.173 31 
3 2016-07-15 00:05:03.970 12 
4 2016-07-15 00:05:04.258 23 
現在

,我樞轉:

pd.pivot_table(d, columns='n', values='ts', aggfunc=lambda x: (np.min(x) - pd.Timestamp('2016-07-15')).days) 

我期望看到用整數表示的列代表天,但是我看到:

n 
12 1970-01-01 
23 1970-01-01 
31 1970-01-01 
Name: ts, dtype: datetime64[ns] 

我在這裏錯過了什麼?並有更好的方法來達到同樣的(試圖讓抵消天的n表中的第一次亮相)

回答

1

IIUC你需要groupby並添加自定義函數apply

print (d.groupby('n')['ts'].apply(lambda x: (x.min() - pd.Timestamp('2016-07-15')).days)) 
n 
12 0 
23 0 
31 0 
Name: ts, dtype: int64 

在您的代碼中,您也可以獲得0,但值會轉換爲datetime1970-01-01),因爲tsdtype之前爲datetime

我覺得那麼就需要投datetimeint,但首先由values轉換爲numpy array

s = pd.pivot_table(d, columns='n', 
         values='ts', 
         aggfunc=lambda x: (np.min(x) - pd.Timestamp('2016-07-15')).days) 
s = s.values.astype(int) 
print (s) 
n 
12 0 
23 0 
31 0 
Name: ts, dtype: int64 
+0

謝謝! groupby似乎是一個更好的替代樞紐! – bluephoton