2017-10-05 22 views
1

有兩個數據幀:平均分配一個月的量爲周

1)DF

Month   Qty 
    ------------------- 
0 2017-10-31  100 
1 2017-11-30  200 

2)周

Week 
    ---------- 
0 2017-10-01 
1 2017-10-08 
2 2017-10-15 
3 2017-10-22 
4 2017-10-29 
5 2017-11-05 
6 2017-11-12 
7 2017-11-19 
8 2017-11-26 

我怎麼能同樣跨周的時間才能發佈每月的數量以下輸出:

Week   Qty 
    ------------------- 
0 2017-10-01  20 
1 2017-10-08  20 
2 2017-10-15  20 
3 2017-10-22  20 
4 2017-10-29  20 
5 2017-11-05  50 
6 2017-11-12  50 
7 2017-11-19  50 
8 2017-11-26  50 

回答

0

轉換datetimesmonth期間由to_period在兩個df

df1['Month'] = pd.to_datetime(df1['Month']).dt.to_period('m') 
df2['Week'] = pd.to_datetime(df2['Week']) 

s = df1.set_index('Month')['Qty'] 
a = df2['Week'].dt.to_period('m') 
df2['Qty'] = a.map(s)/df2.index.to_series().groupby(a).transform('size') 
print (df2) 
     Week Qty 
0 2017-10-01 20.0 
1 2017-10-08 20.0 
2 2017-10-15 20.0 
3 2017-10-22 20.0 
4 2017-10-29 20.0 
5 2017-11-05 50.0 
6 2017-11-12 50.0 
7 2017-11-19 50.0 
8 2017-11-26 50.0 

詳細說明::

然後通過transform創建的每個週期的長度創建Series在地圖柱Week和除法

print (a.map(s)) 
0 100 
1 100 
2 100 
3 100 
4 100 
5 200 
6 200 
7 200 
8 200 
Name: Week, dtype: int64 

print (df2.index.to_series().groupby(a).transform('size')) 
0 5 
1 5 
2 5 
3 5 
4 5 
5 4 
6 4 
7 4 
8 4 
dtype: int64 
+0

如果所述第一數據幀具有重複值: Month Qty ------------------- 0 2017-10-31 100 1 2017-11-30 200 2 2017-10-31 300 我得到一個錯誤,稱爲'InvalidIndexError:Reindexing只對唯一有價值的索引對象有效' – reservoirinvest

+0

它是r最終的問題,因爲需要獨特的價值 - 不能使用「地圖」。你可以使用這種情況創建新的問題,如果不可能使用'df1 = df1.drop_duplicates('Month')'? – jezrael

+0

'df1.drop_duplicates('Month')'產生錯誤_ValueError:keep必須是「first」,「last」或False_ 不會df1.drop_duplicates('Month')使df1唯一,但在進程中刪除行有效數量也是? – reservoirinvest