2017-10-06 43 views
1

我有這樣創建星期明智的數據幀

          Average Std   Rank 
Index   
('East', 'Mid', 'Equities', '2017/09/01') 7.1  2.3   5 
('East', 'Mid', 'Equities', '2017/09/04') 6.4  4.2   14 
('West', 'Mid', 'Equities', '2017/09/05') 6.3  4.3   16 
('East', 'Mid', 'Equities', '2017/09/06') 4  1.8   18 

數據,我需要組也由一週,使它看起來像這樣

Week-1       Average Std  Rank 

East Mid Equities 2017/09/04  6.4  4.2  14 
West Mid Equities 2017/09/05  6.3  4.3  16  

Week-2 
East Mid Equities 2017/09/12  8.1  1.7 25 

等上。

列的平均值,標準偏差和等級來自其他一些數據框。我只需要根據週數(1-4)對日期進行分組,因爲它是每月的數據。所以我需要在這裏添加第一週,第二週等。 哪些功能可以幫助我生成這樣的數據框?在此先感謝

回答

1

使用resample通過weekly frequency starting in Monday與聚集:

df.index = pd.to_datetime(df.index) 
df = df.resample('W-MON').agg({'Average':'mean', 'Std':'std'}) 
print (df) 
      Average  Std 
Date       
2017-09-04  6.75 1.343503 
2017-09-11  5.15 1.767767 

編輯:

print (df.index) 
#MultiIndex(levels=[['East', 'West'], ['Mid'], ['Equities'], 
#     ['2017/09/01', '2017/09/04', '2017/09/05', '2017/09/06']], 
#   labels=[[0, 0, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 2, 3]]) 

#set MultiIndex level names for later groupby 
df.index.names = ('a','b','c','date') 
#create DatetimeIndex 
df = df.reset_index(level=[0,1,2]) 
df.index = pd.to_datetime(df.index) 

#aggreagte, rank has to be aggregate some method like mean, sum, 
#because rank of ranks has no sense 
d = {'Average':'mean', 'Std':'std', 'Rank': 'mean'} 
df = df.groupby(['a','b','c']).resample('W-MON').agg(d) 
print (df) 
           Average  Std Rank 
a b c  date        
East Mid Equities 2017-09-04  6.75 1.343503 19 
        2017-09-11  4.00  NaN 18 
West Mid Equities 2017-09-11  6.30  NaN 16 
+0

我的指數實際上是形式( '東', '中盤', '所有者' 的,'2017/09/01')。此外,我還添加了一列作爲Rank,通過使用前一個數據框中的groupby得到的列。因爲這個,我使用上面的代碼時遇到了問題 –

+0

在原來的'df'中'MultiIndex'? 'print(df.index)' – jezrael

+0

和'rank'的aggreagte方法是什麼?因爲'rank'函數不能聚合 - 所以需要'sum','mean' ...列級別。 – jezrael