web-dev-qa-db-ja.com

Pandasグループビリーと特定の列の最小値で選択]

私は列Aでデータセットをグループ化してから、列Bの最小値と列Cの対応する値を取りたいです。

data = pd.DataFrame({'A': [1, 2], 'B':[ 2, 4], 'C':[10, 4]})
data  
    A   B   C
0   1   4   3
1   1   5   4
2   1   2   10
3   2   7   2
4   2   4   4
5   2   6   6  
 _

そして私は取得したいです:

    A   B   C
0   1   2   10
1   2   4   4
 _

私がAでグループ化して、私に私のデータセットに保持する行を示す値を作成します。

a = data.groupby('A').min()
a['A'] = a.index
to_keep = [str(x[0]) + str(x[1]) for x in a[['A', 'B']].values]
data['id'] = data['A'].astype(str) + data['B'].astype('str')
data[data['id'].isin(to_keep)]
 _

私はこれをするためにはるかに簡単な方法があることを確信しています。私はここで多数の答えを見ましたが、私のデータフレームにマルチインデックスを追加せずにこれをしたいと思います。ご協力ありがとうございました。

15
Wendy

私はあなたがこれを上回っているような気がします。 groupbyidxminを使用するだけです。

df.loc[df.groupby('A').B.idxmin()]

   A  B   C
2  1  2  10
4  2  4   4
 _

df.loc[df.groupby('A').B.idxmin()].reset_index(drop=True)

   A  B   C
0  1  2  10
1  2  4   4
 _
1
cs95

同様の状況がありましたが、より複雑な列見出しがありました(e.g val ")その場合、これは必要です。

df.loc[df.groupby('A')['B val'].idxmin()]
 _
0
Juho