熊猫groupby给出了错误的值

阿尔伯特

我已经在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(正确),但显示为罗斯(不适用于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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章