Pandas: バグ:重複した値のインデックスを持つフレームの_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')
Bug

最も参考になるコメント

@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サイドノート、問題を開くときに再現可能な小さな例を提供することは常に素晴らしいことです)
これを修正するためにPRを行うことに興味がありますか?

はい、すぐに修正します
例について申し訳ありません

ル23:30à9 JUIN 2016、ヨリス・ヴァンデン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]:
ab
1 4 1
1 3 2

[73]の場合:df.nlargest(2、 'a')
アウト[73]:
ab
1 4 1
1 4 1
1 3 2
1 3 2
(将来の参考のために@ Tux1サイドノート、問題を開くときに再現可能な小さな例を提供することは常に素晴らしいことです)
これを修正するためにPRを行うことに興味がありますか?


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信するか、GitHubで表示するか、スレッドをミュートしてください。

私の修正はあまりエレガントではありませんが、MultiIndexと重複値インデックスを処理する他の解決策はありません

Sumは.19.2で正常に機能しているようですが、countを使用すると、意味がないようです。 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 評価