我有一个这样的数据框。
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
答案 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_values
与drop_duplicates
结合使用:
df = df.sort_values('column2', ascending=False).drop_duplicates('column1', keep='last')
编辑:
如果可能的话,需要多个最小值,请使用GroupBy.transform
和boolean 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