Pandas GroupBy并选择具有特定列中最小值的行

12 浏览
0 Comments

Pandas GroupBy并选择具有特定列中最小值的行

我有一个包含列A、B和C的DataFrame。对于A的每个值,我想选择B列中最小值的行。

即,从以下内容中:

df = pd.DataFrame({'A': [1, 1, 1, 2, 2, 2],
                   'B': [4, 5, 2, 7, 4, 6],
                   'C': [3, 4, 10, 2, 4, 6]})      
    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)]

我确信有更简单的方法来做到这一点。

我在这里看到很多答案都使用了MultiIndex,但我更愿意避免使用它。

谢谢您的帮助。

0