大熊猫选择

时间:2020-05-13 14:49:58

标签: python pandas dataframe

我有一个看起来像这样的DataFrame:

Col1  Col2    Col3  Value 
A      1      a         1  
A      1      b         1.4       
A      2      a         1.2
A      2      b         0       
B      1      a         1.2
B      1      b         0.5       
B      2      a         1
B      2      b         1.9         

我想选择数据帧中的行,这样,如果我按Col1和Col2分组,然后对Col3取平均值,则将保留行Col2的值对应于分组数据帧的最小值。如果要手动编写,在这种情况下应该是

df[((df.Col1==A)& (df.Col2==2)|((df.Col1==B)&(df.Col2==1))

,但感觉应该有一种方法可以直接执行此操作并处理更复杂的情况(在Col1,Col2等中具有更多唯一值)。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

IIUC,您可以将列设置为按索引分组,并使用idxmin

cols = ['Col1','Col2']

df = df.set_index(cols)

(df.loc[df.groupby(cols)['Value'].idxmin()]
   .reset_index()
)

输出:

Col1  Col2 Col3  Value
0    A     1    a    1.0
1    A     1    b    1.4
2    A     2    a    1.2
3    A     2    b    0.0
4    B     1    a    1.2
5    B     1    b    0.5
6    B     2    a    1.0
7    B     2    b    1.9
相关问题