我有一个看起来像这样的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等中具有更多唯一值)。任何帮助表示赞赏!
答案 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