2013-11-22 31 views
3

在Pandas中,如何創建一個列,該列是自「今日」以來「列日期」已失效的天數? 由於我的數據中存在重複的「文件」,因此我只需要最大日期。熊貓Python:如何從今天的列創建失效?

這裏是我的假設數據:

File,Status,Date 
pafpull.sps,1,10-15-13 16:33 
pafpull.sps,1,10-14-13 16:33 
test.sps,1,10-14-13 11:19 

目前代碼:

import pandas as pd 


df = pd.read_csv(file, names=['File','Status','Date']) 
df['Date']=pd.to_datetime(df['Date']) 
xx=df.groupby('File')['Date'].max().order() 

回答

3

經過時間表示應爲timedelta類型,這是當你在兩個日期時間進行減法你會得到什麼。

In [43]: datetime.now() - df['Date'] 
Out[43]: 
0 38 days, 00:08:44.917269 
1 39 days, 00:08:44.917269 
2 39 days, 05:22:44.917269 

要把它變成一天,我們必須跳過一些箍。

In [42]: datetime.now().date() - pd.DatetimeIndex(df['Date']).normalize().to_series() 
Out[42]: 
2013-10-15 38 days, 00:00:00 
2013-10-14 39 days, 00:00:00 
2013-10-14 39 days, 00:00:00 
dtype: timedelta64[ns] 

亂七八糟的原因是...長話短說。隨着即將發佈的v0.13,熊貓對timedeltas的支持有所提高,但它有一段路要走。

+0

假設numpy 1.7; iirc可以通過np.timedelta64(1,'D')進行分割,即使在0.12(在0.13中也可以做一個astype),請參閱http://pandas.pydata.org/pandas-docs/dev/timeseries.html# time-deltas-conversions – Jeff

+0

這非常有幫助。謝謝。 –

0

去了一個不同的解決方案,因爲我的最終目標是在時間上做邏輯。

df['Date']=pd.to_datetime(df['Date']) 
xx=df.groupby('File')['Date'].max().order() 
df=pd.DataFrame(xx).reset_index() 
df['diff'] = df.apply(lambda x: (datetime.now() - x['Date']).days, axis=1)