次のようなデータフレームがあります。
user num1 num2
a 1 1
a 2 2
a 3 3
b 4 4
b 5 5
各ユーザーのnum1からの最小値と各ユーザーの最大のnum2を持つデータフレームが必要です。
出力は次のようになります。
user num1 num2
a 1 3
b 4 5
両方の列の最大値が必要な場合は、次のようにすることができます:
a.groupby('user')['num1', 'num2'].max()
次のようなことをする必要のない同等のものはありますか?
series_1 = a.groupby('user')['num1'].min()
series_2 = a.groupby('user')['num2'].max()
# converting from series to df so I can do a join on user
df_1 = pd.DataFrame(np.array([series_1]).transpose(), index=series_1.index, columns=['num1'])
df_2 = pd.DataFrame(np.array([series_2]).transpose(), index=series_2.index, columns=['num2'])
df_1.join(df_2)
groupby
+ agg
by dict
を使用するので、subset
または reindex_axis
。最後に追加 reset_index
必要に応じて、index
をcolumn
に変換します。
df = a.groupby('user').agg({'num1':'min', 'num2':'max'})[['num1','num2']].reset_index()
print (df)
user num1 num2
0 a 1 3
1 b 4 5
以下と同じです:
df = a.groupby('user').agg({'num1':'min', 'num2':'max'})
.reindex_axis(['num1','num2'], axis=1)
.reset_index()
print (df)
user num1 num2
0 a 1 3
1 b 4 5