2017-07-28 5 views
0

へのグループの変化値:パンダ:私は何を最小限

df = pd.DataFrame({'SERIES1':['A','A','A','A','A','A','B','B','B','B','B','B','B','B','C','C','C','C','C'], 
        'SERIES2':[1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1], 
        'SERIES3':[10,12,20,10,12,4,8,8,1,10,12,12,13,13,9,8,7,7,7]}) 

    SERIES1 SERIES2 SERIES3 
0  A  1  10 
1  A  1  12 
2  A  1  20 
3  A  1  10 
4  A  2  12 
5  A  2  4 
6  B  1  8 
7  B  1  8 
8  B  1  1 
9  B  1  10 
10  B  1  12 
11  B  1  12 
12  B  1  13 
13  B  1  13 
14  C  1  9 
15  C  1  8 
16  C  1  7 
17  C  1  7 
18  C  1  7 

私は必要なものはSERIES1とSERIES2によってグループにあると、そのグループの最小値にシリーズ3で値を変換します。すなわち:

df2 = pd.DataFrame({'SERIES1':['A','A','A','A','A','A','B','B','B','B','B','B','B','B','C','C','C','C','C'], 
        'SERIES2':[1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1], 
        'SERIES3':[10,10,10,10,4,4,1,1,1,1,1,1,1,1,7,7,7,7,7]}) 

    SERIES1 SERIES2 SERIES3 
0  A  1  10 
1  A  1  10 
2  A  1  10 
3  A  1  10 
4  A  2  4 
5  A  2  4 
6  B  1  1 
7  B  1  1 
8  B  1  1 
9  B  1  1 
10  B  1  1 
11  B  1  1 
12  B  1  1 
13  B  1  1 
14  C  1  7 
15  C  1  7 
16  C  1  7 
17  C  1  7 
18  C  1  7 

私は、これは.groupby()で行うことができます感じがありますが、私は、既存のデータフレームでそれを交換するか、新しいシリーズとして追加するかどうかはわかりません。グループごとに正しい最少値です

df.groupby(['SERIES1', 'SERIES2']).min() 

       SERIES3 
SERIES1 SERIES2   
A  1    10 
     2    4 
B  1    1 
C  1    7 

が、私はその元のデータフレームにポップするための簡単な方法を考え出すカント:

は私が得ることができますよ。

答えて

1

あなたは、データフレームに戻って割り当てることができ、同じ長さのシリーズバック与えgroupby.transform、使用することができます。

df['SERIES3'] = df.groupby(['SERIES1', 'SERIES2']).SERIES3.transform('min') 
df 

enter image description here

関連する問題