以下の機能は正しく実装されていません。 フレームに重複した値を持つインデックスがある場合、 n
を超える行があり、適切にソートされていない結果が得られます。 したがって、DataFrameのnsmallest
とnlargest
は、この特定のケースでは正しいフレームを返しません。
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')
確かに:
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 :
最も参考になるコメント
@shankararul参照: https :