2015-10-14 60 views
0

兩個數據幀的特定列給出如下:如何總結根據日期

DF1

 Start Date End Date     
0 20110706 20110803     
1 20110803 20110907 

DF2

 DATE  50  51  52  53  54 
    0 20110706 3.51 2.51 1.51 0.51 0 
    1 20110801 10.98 9.98 8.98 7.98 6.98  
    2 20110808 9.45 8.45 7.45 6.45 5.45  
    3 20110906 0  1  23.2 0  1.2 

基於關閉DF1的,我怎麼能修改DF2如此根據日期落在df1開始日期(包括左邊)內的範圍來對列進行求和。留

修改DF2起迄日期。(與包含在DF開始日期和結束日期範圍)

 Start Date End Date 50  51  52  53  54 
    0 20110706 20110803 14.49 12.49 10.49 8.49 6.98 
    1 20110803 20110907 9.45 9.45 30.65 6.45 6.65 

這又如何實現呢?

+0

所以要清楚,你想做的事基本上是一個內部聯接在DF2的'DATE'鍵,使得它的開始/結束日期範圍內? – Tgsmith61591

+0

@ Tgsmith61591,校正,並且也將範圍內日期的值相加。 – Techno04335

+0

您已將此標籤標記爲「excel」,您是否想要特定於Excel或熊貓的答案? – EdChum

回答

1

由於日期在Start DateEnd Date中重複,因此不清楚df2中的日期與開始或結束的時間有什麼關係;是包含的還是包含的?假設它的左包容你可以做

df1['Start Date'] = pd.DatetimeIndex(df1['Start Date']) 
df1.set_index('Start Date', inplace=True) 

df2['DATE'] = pd.to_datetime(df2.DATE) 
df2.set_index('DATE', inplace=True) 

sums = df2.groupby(df1.index.asof).sum() 
pd.concat([df1, sums], axis=1) 
+0

我假設包容性的謝謝驗證! – Techno04335

+0

當我這樣做時,它會導致NaN,或所有數字的空值。也許這是一個轉換問題? – Techno04335

+0

嗯..爲我工作。他們的關鍵一步是倒數第二。首先檢查兩個框架上的索引是否是日期時間索引。然後檢查'map(df1.index.asof,df2.index)'的輸出。這是指示組的數組('df1.index.asof'是一個應用於'df2'索引的函數)。對於'df2.index'中的每個日期,輸出應該是該日期之前來自'df1.index'的最新日期。 – JoeCondron