2017-03-18 35 views
5

我的熊貓數據幀由一個類別列JOB_TITLE,數字列BASE_SALARY和日期時間指數JOIN_DATE的。我想在分類和下采樣日期時間的組如下執行聚合:在pandas數據框上同時操作groupby和resample?

# Resampled at frequency of start data of every 5 years 
mean_agg = (df 
      .groupby('JOB_TITLE') 
      .resample('5AS')['BASE_SALARY'] 
      .mean()) 

不幸的是,隨着GROUPBY操作重新採樣之前發生,重新採樣操作被獨立地爲每個JOB_TITLE組進行。這將導致以下系列:

| JOB_TITLE   | JOIN_DATE |  | 
|-------------------|------------|-------| 
| Data Scientist | 2004-01-01 | 60000 | 
|     | 2009-01-01 | 75000 | 
|     | 2014-01-01 | 90000 | 
|     |   |  | 
| Software Engineer | 2001-01-01 | 70000 | 
|     | 2006-01-01 | 85000 | 
|     | 2011-01-01 | 90000 | 
|     | 2016-01-01 | 85000 | 

正如你可以看到在JOIN_DATE水平數據科學家組和軟件工程師的指標並不一致。這就造成當你申請拆散的水平JOB_TITLE如下問題:

mean_agg.unstack('JOB_TITLE') 

這將導致以下數據幀:

| JOB_TITLE | Data Scientist | Software Engineer | 
|------------|----------------|-------------------| 
| JOIN_DATE |    |     | 
| 2001-01-01 | NaN   | 70000    | 
| 2004-01-01 | 60000   | NaN    | 
| 2006-01-01 | NaN   | 85000    | 
| 2009-01-01 | 75000   | NaN    | 
| 2011-01-01 | NaN   | 70000    | 
| 2014-01-01 | 90000   | NaN    | 
| 2016-01-01 | NaN   | 85000    | 

如何避免GROUPBY和重採樣的這個順序操作,而是進行同時操作?謝謝!

回答

3

更新熊貓0.21答案:pd.TimeGrouper is getting deprecated,使用pd.Grouper代替。

mean_agg = (df.groupby(['JOB_TITLE',pd.Grouper(freq='5AS')])['BASE_SALARY'] 
       .mean()) 

mean_agg.unstack('JOB_TITLE') 

而不是使用重採樣,讓我們​​嘗試使用pd.TimeGrouper

mean_agg = (df 
     .groupby(['JOB_TITLE',pd.TimeGrouper(freq='5AS')])['BASE_SALARY'] 
     .mean()) 

mean_agg.unstack('JOB_TITLE') 

TimeGrouper對齊分組的時間範圍內的垃圾箱。

+0

太棒了! 'pd.TimeGrouper()'對於我的問題是完美的。 –

相關問題