Python 使用Pandas返回嵌套排序数据帧的NLAGEST

Python 使用Pandas返回嵌套排序数据帧的NLAGEST,python,pandas,Python,Pandas,我正在努力使用一个dataframe,它列出了大量数据,如果有意义的话,它有几个过滤级别。所以我的数据现在是按州名字母顺序排序的。第二级过滤适用于每个县的人口数据。我使用的过滤是df.sort\u values()。我现在需要提取每个州最高的三个人口县的统计数据,我不知道如何实现这一点 因此,我的数据如下所示(我在这里省略了行索引): 现在我想从我的数据框中得到每个州人口最多的县。由于没有和熊猫一起工作过,我最初的猜测是要为它们做一次尝试。类似这样的东西(显然是有害的): 即使在打这个的时候,我

我正在努力使用一个dataframe,它列出了大量数据,如果有意义的话,它有几个过滤级别。所以我的数据现在是按州名字母顺序排序的。第二级过滤适用于每个县的人口数据。我使用的过滤是
df.sort\u values()
。我现在需要提取每个州最高的三个人口县的统计数据,我不知道如何实现这一点

因此,我的数据如下所示(我在这里省略了行索引):

现在我想从我的数据框中得到每个州人口最多的县。由于没有和熊猫一起工作过,我最初的猜测是要为它们做一次尝试。类似这样的东西(显然是有害的):

即使在打这个的时候,我知道它并不完全有意义,但我不知道如何更好地解释它。希望有人能帮忙

干杯

我想你需要:

然后从第二级开始,通过以下方式选择:

你可以用

df.sort\u值('State','Population')

在那之后,你可以使用

df.groupby('State')。标题(3)

简言之:

s = df.sort_values(['State','Population'],ascending=False).groupby('State').head(3)

很抱歉,您是在寻找
df.groupby('State')['Population'].nlargest(3)
?您使用上述代码片段中的索引将其索引回主df:
df.loc[df.groupby('State')['Population'].nlargest(3).index.get_level_value(1)]
Hi Ed,是的,这就是我想要的。我还在思考如何思考熊猫。别忘了排除sumlev==40行;)非常感谢。这看起来很简单,但我已经为此挣扎了几个小时。。。我爱这个社区!是的,我用过这个,但它只对我的数据帧排序。我需要提取每个州最高的三个人口。我已经实现了Jezraels解决方案,它像一个符咒一样工作。头(3)将提取它。
list_l = []
for i in df['State'].unique(): #Get a series with every unique state listed once
    list_l.append(df[(df['State'] == i])).nlargest(3)
return list_l
s = df.groupby('State')['Population'].nlargest(3)
print (s)
State     
Alabama  0    100
         1     50
         2     40
Wyoming  5    180
         6    150
         7     56
Name: Population, dtype: int64
print (s.index.get_level_values(1))
Int64Index([0, 1, 2, 5, 6, 7], dtype='int64')

print (df.ix[s.index.get_level_values(1)])
     State County  Population
0  Alabama      a         100
1  Alabama      b          50
2  Alabama      c          40
5  Wyoming   a.51         180
6  Wyoming   b.51         150
7  Wyoming   c.51          56
s = df.sort_values(['State','Population'],ascending=False).groupby('State').head(3)