Skip to main content
 首页 » 编程设计

python之Pandas groupby 给出了错误的值

2025年05月04日14freeliver54

我在 python 中使用 pandas 编写了一个由数字和字符串组成的数据框:

import pandas as pd 
import numpy as np 
d = {'col1': [1, 5,1,5,1,5,1,5], 'col2': [20,20,40,40,20,20,40,40],\ 
     'col3': np.arange(1,9)*0.1,\ 
     'col4':['Jen','Ross','Chan','Mon','Joe','Phebe','Janice','Gunter']} 
df = pd.DataFrame(data=d) 

数据框看起来像:

col1    col2    col3    col4 
0   1   20      0.1     Jen 
1   5   20      0.2     Ross 
2   1   40      0.3     Chan 
3   5   40      0.4     Mon 
4   1   20      0.5     Joe 
5   5   20      0.6     Phoebe 
6   1   40      0.7     Janice 
7   5   40      0.8     Gunther 

使用 groupby,我想为每个唯一的 (x,y) 对找到 col3 的最小值,其中 x 属于 col1,y 属于 col2。我还需要知道 col4 中导致这样的最小值的相应名称是什么。我做了:

df2=df.groupby(['col1','col2']).min() 
print(df2) 

我得到了:

col1    col2    col3    col4         
1       20      0.1     Jen 
        40      0.3     Chan 
5       20      0.2     Phoebe 
        40      0.4     Gunther 

如您所见,最后两行是错误的。查看表中的 (5,20) 对,最小值为 0.2(正确),但出现在 ross 上(不是 Phoebe)。我怎样才能解决这个问题?

请您参考如下方法:

我们可以使用 idxmin 解决这个问题

df.loc[df.groupby(['col1','col2'])['col3'].idxmin(),:] 
   col1  col2  col3  col4 
0     1    20   0.1   Jen 
2     1    40   0.3  Chan 
1     5    20   0.2  Ross 
3     5    40   0.4   Mon 

或者drop_duplicates

df.sort_values(['col3']).drop_duplicates(['col1','col2']) 
   col1  col2  col3  col4 
0     1    20   0.1   Jen 
1     5    20   0.2  Ross 
2     1    40   0.3  Chan 
3     5    40   0.4   Mon