サンプルデータ(再入力しないと潜在的な回答者が使用できない画像を投稿したため、代わりに簡単な例を作成していることに注意してください):
df=pd.DataFrame({ 'id':[1,1,1,1,2,2,2,2],
'a':range(8), 'b':range(8,0,-1) })
これの鍵は、読みやすい方法で物事をマージできるように、インデックスを使用idxmax
してidxmin
からそれをいじくり回すことです。これが全体の答えです。中間データフレームを調べて、これがどのように機能しているかを確認することをお勧めします。
df_max = df.groupby('id').idxmax()
df_max['type'] = 'max'
df_min = df.groupby('id').idxmin()
df_min['type'] = 'min'
df2 = df_max.append(df_min).set_index('type',append=True).stack().rename('index')
df3 = pd.concat([ df2.reset_index().drop('id',axis=1).set_index('index'),
df.loc[df2.values] ], axis=1 )
df3.set_index(['id','level_2','type']).sort_index()
a b
id level_2 type
1 a max 3 5
min 0 8
b max 0 8
min 3 5
2 a max 7 1
min 4 4
b max 4 4
min 7 1
DF2ルックスがこれを気に入っていることに特に注意してください:
id type
1 max a 3
b 0
2 max a 7
b 4
1 min a 0
b 3
2 min a 4
b 7
最後の列は、インデックスの値が保持df
して得られたものidxmax
としますidxmin
。したがって、基本的に必要なすべての情報はにありdf2
ます。残りの部分は、マージしてdf
読みやすくするだけです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加