2017-04-24 63 views
3

我有一個數據幀DateOffset熊貓減法

[in] MyDates 
[out] 
2017-04-04  -5.0 
2017-04-03  -5.0 
2017-03-31  -4.0 
2017-03-30  -6.0 
2017-03-29  -5.0 
2017-03-28  -5.0 

每個數字對應的,我應該有多少天從對應的日期添加或刪除。我想創建一個索引日期的新列減去第一列中的天數。我知道我可以用DateOffset做到這一點,但我無法弄清楚...

謝謝!

+0

這是一個系列或df? – EdChum

回答

4

可以列轉換爲TimedeltaIndexto_timedeltaadd+)或。減去(-)值:

df['new'] = df.index - pd.TimedeltaIndex(df['col'], unit='d') 
print (df) 
      col  new 
2017-04-04 -5.0 2017-04-09 
2017-04-03 -5.0 2017-04-08 
2017-03-31 -4.0 2017-04-04 
2017-03-30 -6.0 2017-04-05 
2017-03-29 -5.0 2017-04-03 
2017-03-28 -5.0 2017-04-02 

或者:

df['new'] = df.index + pd.to_timedelta(df['col'], unit='d') 
print (df) 
      col  new 
2017-04-04 -5.0 2017-03-30 
2017-04-03 -5.0 2017-03-29 
2017-03-31 -4.0 2017-03-27 
2017-03-30 -6.0 2017-03-24 
2017-03-29 -5.0 2017-03-24 
2017-03-28 -5.0 2017-03-23 

如果Seriesinput添加to_frame

df = s.to_frame('date') 
df['new'] = df.index - pd.TimedeltaIndex(df['date'], unit='d') 
print (df) 
      date  new 
2017-04-04 -5.0 2017-04-09 
2017-04-03 -5.0 2017-04-08 
2017-03-31 -4.0 2017-04-04 
2017-03-30 -6.0 2017-04-05 
2017-03-29 -5.0 2017-04-03 
2017-03-28 -5.0 2017-04-02 
+0

我不確定,所以我會添加兩個解決方案。 – jezrael

+0

這是補充,謝謝你的幫助! – user6457870

3

IIUC要構建一個TimedeltaIndex和補充一點:

In [173]:  
df.index + pd.TimedeltaIndex(df['days'], unit='d') 

Out[173]: 
DatetimeIndex(['2017-03-30', '2017-03-29', '2017-03-27', '2017-03-24', 
       '2017-03-24', '2017-03-23'], 
       dtype='datetime64[ns]', freq=None) 

如果它是一列你只是做df['Dates'] + pd.TimedeltaIndex(df['days'], unit='d')

In [176]: 
df['offset_date'] = df['Dates'] + pd.TimedeltaIndex(df['days'], unit='d') 
df 

Out[176]: 
     Dates days offset_date 
0 2017-04-04 -5.0 2017-03-30 
1 2017-04-03 -5.0 2017-03-29 
2 2017-03-31 -4.0 2017-03-27 
3 2017-03-30 -6.0 2017-03-24 
4 2017-03-29 -5.0 2017-03-24 
5 2017-03-28 -5.0 2017-03-23 

如果它的索引和要添加爲一列它是相當很多相同的操作:

In [180]:  
df['offset_date'] = df.index + pd.TimedeltaIndex(df['days'], unit='d') 
df 

Out[180]: 
      days offset_date 
Dates      
2017-04-04 -5.0 2017-03-30 
2017-04-03 -5.0 2017-03-29 
2017-03-31 -4.0 2017-03-27 
2017-03-30 -6.0 2017-03-24 
2017-03-29 -5.0 2017-03-24 
2017-03-28 -5.0 2017-03-23 
+0

可能看起來像一個隨機的評論,但只是想與你一起回顧'100K'的旅程。我記得在2015年夏天我開始回答NumPy的問題時,我看到了你回答問題的答案,我們約在35-40K左右的時候回答了相同的問題。不知何故,我們的Stackoverflow旅程已經平行,不僅僅是代表的意義,而是通過發佈答案來改進SO社區的意圖,並通過清理dup問題和一般的這類東西來保持它的清潔。所以,只是想祝賀你取得這樣的成就和迄今爲止的旅程:) – Divakar

+0

@Divakar謝謝..我一直對你的專業知識印象深刻,我總是會學到新的東西。說實話,我對SO有點厭倦了,原因是問題不好或問題的第一個答案很糟糕/有一個不明確的問題/或者由於目標轉移而不斷需要修改答案。我期待着你的100K代表目標,並且無論如何我會幫助我 – EdChum

+0

是的,不斷需要改裝來特別用基於數據的語言/模塊/軟件包來關閉重複模塊一直是一個問題。也許SO會設計一個更好的模型來關閉/處理這些模型。讓我們期待最好的享受現在的時刻:) – Divakar