Pandas: BUG: di _nsorted untuk bingkai dengan indeks nilai duplikat

Dibuat pada 9 Jun 2016  ·  5Komentar  ·  Sumber: pandas-dev/pandas

Fungsi di bawah ini tidak diterapkan dengan benar. Jika bingkai memiliki indeks dengan nilai duplikat, Anda akan mendapatkan hasil dengan lebih dari n baris dan tidak diurutkan dengan benar. Jadi nsmallest dan nlargest untuk DataFrame tidak mengembalikan bingkai yang benar dalam kasus khusus ini.

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

Komentar yang paling membantu

Semua 5 komentar

Memang:

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

( Catatan samping
Tertarik melakukan PR untuk memperbaikinya?

Ya, saya akan segera memperbaikinya
Maaf tentang contoh

Le 9 juin 2016 pukul 23:30, Joris Van den Bossche [email protected] écrit:

Memang:

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

Dalam [72]: df.nlargest (1, 'a')
Keluar [72]:
ab
1 4 1
1 3 2

Dalam [73]: df.nlargest (2, 'a')
Keluar [73]:
ab
1 4 1
1 4 1
1 3 2
1 3 2
( Catatan samping
Tertarik melakukan PR untuk memperbaikinya?

-
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub, atau nonaktifkan utasnya.

perbaikan saya tidak terlalu elegan tetapi saya tidak melihat solusi lain untuk menangani MultiIndex dan indeks nilai duplikat

Sum tampaknya berfungsi dengan baik di .19.2 Tetapi dengan menghitung, tampaknya tidak masuk akal. Df diulang sebanyak "n". Apakah itu bug atau saya melakukan sesuatu yang salah?

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
Apakah halaman ini membantu?
0 / 5 - 0 peringkat