تم تنفيذ الوظيفة أدناه بشكل غير صحيح. إذا كان الإطار يحتوي على فهرس بقيم مكررة ، فستحصل على نتيجة بأكثر من n
الصفوف ولم يتم فرزها بشكل صحيح. لذلك لا يُرجع nsmallest
و nlargest
لـ DataFrame إطارًا صحيحًا في هذه الحالة بالذات.
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
( @ ملاحظة جانبية
هل أنت مهتم بعمل العلاقات العامة لإصلاح هذا؟
نعم سوف أصلح ذلك قريبا
آسف على سبيل المثال
Le 9 juin 2016 à 23:30، Joris Van den Bossche [email protected] écrit:
بالفعل:
في [71]: df = pd.DataFrame ({'a': [1،2،3،4]، 'b': [4،3،2،1]} ، الفهرس = [0،0،1 ، 1])
في [72]: df.nlargest (1، "a")
الخارج [72]:
أب
1 4 1
1 3 2في [73]: df.nlargest (2، "a")
الخارج [73]:
أب
1 4 1
1 4 1
1 3 2
1 3 2
( @ ملاحظة جانبية
هل أنت مهتم بعمل العلاقات العامة لإصلاح هذا؟-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub ، أو قم بكتم صوت الموضوع.
الإصلاح الذي أجريته ليس أنيقًا للغاية ولكني لا أرى أي حل آخر للتعامل مع مؤشر القيمة المتعددة ومؤشر القيمة المكررة
يبدو أن Sum يعمل بشكل جيد في .19.2 ولكن مع العد ، لا يبدو أنه منطقي. يتكرر 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://github.com/pandas-dev/pandas/issues/15297
التعليق الأكثر فائدة
shankararul انظر: https://github.com/pandas-dev/pandas/issues/15297