Pandas: BUG:在_nsorted中用于具有重复值索引的帧

创建于 2016-06-09  ·  5评论  ·  资料来源: pandas-dev/pandas

以下功能未正确实现。 如果框架的索引具有重复的值,则结果将包含超过n行且未正确排序的结果。 因此,在这种特殊情况下,DataFrame的nsmallestnlargest不会返回正确的帧。

def _nsorted(self, columns, n, method, keep):
    if not com.is_list_like(columns):
        columns = [columns]
    columns = list(columns)
    ser = getattr(self[columns[0]], method)(n, keep=keep)
    ascending = dict(nlargest=False, nsmallest=True)[method]
    return self.loc[ser.index].sort_values(columns, ascending=ascending,
                                           kind='mergesort')

最有用的评论

@shankararul参见: https :

所有5条评论

的确:

In [71]: df = pd.DataFrame({'a':[1,2,3,4], 'b':[4,3,2,1]}, index=[0,0,1,1])

In [72]: df.nlargest(1, 'a')
Out[72]:
   a  b
1  4  1
1  3  2

In [73]: df.nlargest(2, 'a')
Out[73]:
   a  b
1  4  1
1  4  1
1  3  2
1  3  2

@ Tux1旁注以供将来参考,在打开问题时总是提供一个可重现的小示例总是很好的)
有兴趣做一个公关来解决这个问题?

是的,我会尽快解决
对不起,例子

2016年6月9日à23:30,Joris Van den Bossche [email protected] aécrit:

的确:

在[71]中:df = pd.DataFrame({'a':[1,2,3,4],'b':[4,3,2,1]},index = [0,0,1, 1])

在[72]中:df.nlargest(1,'a')
出[72]:
b
1 4 1
1 3 2

在[73]中:df.nlargest(2,'a')
出[73]:
b
1 4 1
1 4 1
1 3 2
1 3 2
@ Tux1旁注以供将来参考,在打开问题时总是提供一个可重现的小示例总是很好的)
有兴趣做一个公关来解决这个问题?

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看,或使该线程静音。

我的修复方法不是很好,但是我看不到任何其他解决方案来处理MultiIndex和重复值索引

在.19.2中,Sum似乎可以正常工作,但是按计数,这似乎没有任何意义。 df重复次数是“ n”的次数。 那是一个错误还是我做错了什么?

df.groupby(['a']).agg({'b':'count'}).nlargest(2, 'b')

    b
a   
1   1
2   1
3   1
4   1
1   1
2   1
3   1
4   1

@shankararul参见: https :

此页面是否有帮助?
0 / 5 - 0 等级