2017-03-18 13 views
5

私のpandasデータフレームは、カテゴリ型の列JOB_TITLE、数値型の列BASE_SALARY、および日時インデックスJOIN_DATEで構成されています。私は次のようにカテゴリとダウンサンプリング日付時刻のグループ上で集計を実行したいと思います:GROUPBY操作はリサンプルの前に発生しているようパンダのデータフレームでのgroupbyとresampleの同時操作ですか?

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

残念ながら、リサンプル操作は、各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') 

これは、次のデータフレームになり:私はGROUPBYとリサンプルのこの一連の動作を避け、代わりに実行することができますどのように

| 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    | 

同時の操作ですか?ありがとう!

答えて

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()'は私の問題に最適です。 –

関連する問題