从数据框中的索引获取最小值

时间:2018-10-25 09:22:53

标签: python pandas dataframe

我有一个这样的数据框。

column1 column2

1         2
1         3
1         4
2         3
2         1
2         4

我想为column1中的每个值获取最小值。所以我的输出是

column1    column2
1             2
2             1

当我尝试代码

df = df[df['column2'].isin(df.groupby('column1').idxmin(['column2']).values)]

它给了我一个空的数据框,如果我尝试的话

a = df[df['column2'].isin(df.groupby('column1').min()['column2'].values)]

由于我不明白的原因,它删除了一些值。

我使用python 2.7

1 个答案:

答案 0 :(得分:2)

函数DataFrameGroupBy.idxmax返回每组列column2的最小值的索引值,因此选择loc是必需的:

df = df.loc[df.groupby('column1')['column2'].idxmin()]
print (df)
   column1  column2
0        1        2
4        2        1

另一种解决方案是将sort_valuesdrop_duplicates结合使用:

df = df.sort_values('column2', ascending=False).drop_duplicates('column1', keep='last')

编辑:

如果可能的话,需要多个最小值,请使用GroupBy.transformboolean indexing

print (df)
   column1  column2
0        1        2
1        1        3
2        1        4
3        2        1
4        2        1
5        2        4


df2 = df[df.groupby('column1')['column2'].transform('min') == df['column2']]
print (df2)
   column1  column2
0        1        2
3        2        1
4        2        1