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')
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 2Dalam [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
@shankararul lihat: https://github.com/pandas-dev/pandas/issues/15297
Komentar yang paling membantu
@shankararul lihat: https://github.com/pandas-dev/pandas/issues/15297