综合Pandas选择

2024-04-23 16:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据帧:

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条回答
网友
1楼 · 发布于 2024-04-23 16:26:40

您可以将要分组的列设置为索引,并使用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

相关问题 更多 >