2017-09-29 4 views
2

複数の他の列の統計情報を取得し、私は列を持つ新しいデータフレームを作成したいパンダ:GROUPBYのための一つの列を使用して、私は3列のデータフレームをHV

ID col1 col2 
A1 1 12 
A1 3 10 
A1 4 16 
........ 
A9 9 18 
A9 7 11 
A9 8 15 

ID col1_min, col1_max, col2_min, col2_max. 

A1 1   4   10  16 
........... 
A9 7   9   11  18 

私はGROUPBY

col1_min = df.groupby(['ID'])['col1'].min() 
col1_max = df.groupby(['ID'])['col1'].max() 
col2_min = df.groupby(['ID'])['col2'].min() 
col2_max = df.groupby(['ID'])['col2'].max() 

df2 = pd.DataFrame({'col1_min':col1_min, 'col1_max':col1_max, 'col2_min':col2_min, 'col2_max':col2_max}) 

を使用することにより、これを行うことができ、より良く、よりエレガントな方法(1つのライナー)がなければなりませんか?

事前に感謝します。

答えて

3
df.groupby('ID').agg(['min', 'max']) 

    col1  col2  
    min max min max 
ID     
A1 1 4 10 16 
A9 7 9 11 18 

あなたの列ヘッダが数値であれば、あなたが最後に

d = df.groupby('ID').agg(['min', 'max']) 
d.columns = d.columns.map('{0[0]}_{0[1]}'.format) 
d 

    col1_min col1_max col2_min col2_max 
ID           
A1   1   4  10  16 
A9   7   9  11  18 

、0を使用することができます

d = df.groupby('ID').agg(['min', 'max']) 
d.columns = d.columns.map('_'.join) 
d 

    col1_min col1_max col2_min col2_max 
ID           
A1   1   4  10  16 
A9   7   9  11  18 

の列をフラット化を使用して、インデックスを適切なデータフレームに戻します。

d = df.groupby('ID').agg(['min', 'max']) 
d.columns = d.columns.map('{0[0]}_{0[1]}'.format) 
d.reset_index() 

    ID col1_min col1_max col2_min col2_max 
0 A1   1   4  10  16 
1 A9   7   9  11  18 
1

使用GROUPBYとAGG

df = df.groupby('ID').agg({'col1': ['min', 'max'], 'col2': ['min', 'max']}).reset_index() 
df.columns = df.columns.map('_'.join)min', 'max']}) 

    ID_ col1_min col1_max col2_min col2_max 
0 A1 1   4   10   16 
1 A9 7   9   11   18 
1

私はPIRとヴァイがすでに素敵な答えを提供だと思う、しかし、あなたが別の何かを希望の場合、あなたはこれを見てすることができます...

from functools import reduce 
df1=df.groupby('ID')['col1','col2'].apply(lambda x: [x.min().values,x.max().values]) 
pd.DataFrame(data=[reduce(lambda x,y: np.append(x,y),l) for l in df1],index=df1.index,columns=np.core.defchararray.add(np.repeat(['col1','col2'], 2),np.tile(['min','max'],2))) 


Out[1001]: 
    col1min col1max col2min col2max 
ID          
A1  1  10  4  16 
A9  7  11  9  18 
関連する問題