2016-05-16 4 views
0

Iは次のようにグループ化されたデータフレームを有する:複雑GROUPBYまたはピボット表計算

UNIT CA DATE  SCP  TIME  LABEL  VALUES1  VALUES2   
R001 A058 08-01-13 01-00-00 01:00:00 REGULAR 340751.000 194975.000 
          05:00:00 REGULAR 340753.000 194975.000 
          09:00:00 REGULAR 341251.000 194984.000 
          09:39:56 REGULAR 341440.000 194994.000 
          13:00:00 REGULAR 341808.000 195061.000 
          17:00:00 REGULAR 342030.000 195295.000 
          21:00:00 REGULAR 342214.000 195659.000 
        01-00-01 01:00:00 REGULAR 245262.000 221709.000 
          05:00:00 REGULAR 245262.000 221709.000 
          09:00:00 REGULAR 245428.000 221742.000 
          09:39:56 REGULAR 245508.000 221754.000 
          13:00:00 REGULAR 245620.000 221856.000 
          17:00:00 REGULAR 245679.000 222178.000 
          21:00:00 REGULAR 245743.000 222604.000 

を私は差分を計算し、各SCPのためVALUE1とvalue2の最大及び最小値を抽出します

UNIT CA DATE  SCP  DIFF OF MAX - MIN VALUE1 DIFF OF MAX - MIN VALUE2   
R001 A058 08-01-13 01-00-00  ....       .... 
        01-00-01  ....       .... 

私はそれを行う方法を理解していません。私はgroupbyまたはpivot_tableを使ってそれを行うには何らかの方法が必要であると信じています。

ありがとうございます。

答えて

2

IIUC、.groupby()levelで動作するはずです。 MultiIndexレベルに

df.set_index(['UNIT', 'CA', 'DATE', 'SCP'], inplace=True) 

<class 'pandas.core.frame.DataFrame'> 
MultiIndex: 14 entries, (R001, A058, 2013-08-01 00:00:00, 01-00-00) to (R001, A058, 2013-08-01 00:00:00, 01-00-01) 
Data columns (total 4 columns): 
TIME  14 non-null object 
LABEL  14 non-null object 
VALUES1 14 non-null int64 
VALUES2 14 non-null int64 
dtypes: int64(2), object(2) 

            TIME LABEL VALUES1 VALUES2 
UNIT CA DATE  SCP           
R001 A058 2013-08-01 01-00-00 01:00:00 REGULAR 340751 194975 
        01-00-00 05:00:00 REGULAR 340753 194975 
        01-00-00 09:00:00 REGULAR 341251 194984 
        01-00-00 09:39:56 REGULAR 341440 194994 
        01-00-00 13:00:00 REGULAR 341808 195061 
        01-00-00 17:00:00 REGULAR 342030 195295 
        01-00-00 21:00:00 REGULAR 342214 195659 
        01-00-01 01:00:00 REGULAR 245262 221709 
        01-00-01 05:00:00 REGULAR 245262 221709 
        01-00-01 09:00:00 REGULAR 245428 221742 
        01-00-01 09:39:56 REGULAR 245508 221754 
        01-00-01 13:00:00 REGULAR 245620 221856 
        01-00-01 17:00:00 REGULAR 245679 222178 
        01-00-01 21:00:00 REGULAR 245743 222604 

グループを、2列ごとにmax()min()の違いを適用します:あなたのサンプルデータを皮切り

df.groupby(level=['UNIT', 'CA', 'DATE', 'SCP'])['VALUES1', 'VALUES2'].apply(lambda x: x.max()-x.min()) 

           VALUES1 VALUES2 
UNIT CA DATE  SCP      
R001 A058 2013-08-01 01-00-00  1463  684 
        01-00-01  481  895 
+0

が更新の答えを参照してください。 – Stefan

+0

マルチインデックスはどのように作成しますか?私はパンダの文書を読んだが、私には分かりません。ウェブ上でそれほど多くはありません。ありがとう。 – Windstorm1981

+1

複数の列をインデックスとして設定するだけです。サンプルコードの先頭にある 'df.set_index(['UNIT'、 'C​​A'、 'DATE'、 'SCP']、inplace = True)'行を参照してください。ソートしたい場合、 'df.sortlevel()'があります。 – Stefan

関連する問題