簡體   English   中英

Pandas 使用前向填充重新采樣 MultiIndex 數據幀

[英]Pandas resample MultiIndex dataframe with forward fill

我試圖通過每個月最后一次有效的每日觀察來將 MultiIndex 數據幀重新采樣到更細粒度的頻率(每天到月末)。

例如,給定以下數據框:

df = pd.DataFrame({'date': [pd.to_datetime('2012-03-29')]*4 
                   + [pd.to_datetime('2012-03-30')]*4 
                   + [pd.to_datetime('2012-04-01')]*4, 
                   'groups':[1,2,3,4]*3, 
                   'values':np.random.normal(size=12)})
df = df.set_index(['date', 'groups'])


                      values
date        groups  
2012-03-29     1    0.013681
               2    0.359522
               3    -0.525454
               4    -0.282541
2012-03-30     1    0.155501
               2    -1.053596
               3    0.003049
               4    -0.165875
2012-04-01     1    -0.049135
               2    2.701785
               3    2.240875
               4    0.057297

所需的最終數據幀是:

                      values
date        groups  
2012-03-31     1    0.155501
               2    -1.053596
               3    0.003049
               4    -0.165875

在常規數據幀(具有單個索引)中,可以使用 df.asfreq('M', method='ffill') 實現所需的輸出,如下所示。

df = pd.DataFrame({'date': [pd.to_datetime('2012-03-29')] + pd.date_range('2012-04-01', '2012-04-04').to_list(), 
                   'values':np.random.normal(size=5)})
df = df.set_index('date')
df_monthly = df.asfreq('M', method='ffill')

Where df is: 
 
             values
date    
2012-03-29  1.988554
2012-04-01  -1.054163
2012-04-02  -1.112537
2012-04-03  0.224515
2012-04-04  0.152175

and df_monthly is: 

             values
date    
2012-03-31  1.988554

任何幫助深表感謝。 提前致謝。

用:

df_monthly = df.reset_index(level=1).groupby('groups')[['values']].apply(lambda x: x.asfreq('M', method='ffill')).swaplevel(1,0)
print (df_monthly)
                     values
date       groups          
2012-03-31 1      -2.951662
           2      -1.495653
           3      -0.948413
           4       0.066219

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM