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

时间:2019-01-31 23:45:59

标签: python pandas group-by pandas-groupby

我要按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)]

我敢肯定,还有一种更直接的方法可以做到这一点。 我在这里看到了许多使用多重索引的答案,但是我想在不向数据框添加多重索引的情况下做到这一点。 谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我觉得您想得太多了。只需使用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 :(得分:0)

情况类似,但列标题为(例如“ B val”),在这种情况下需要这样做:

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