2014-10-06 86 views
0

我有一个数据框,其中包含一些包含数字数据的列和其他包含文本的列。这基本上是这样的:熊猫 - 根据选定列中的排名值创建新的数据框

Age Weight Blood Sugar Study Group Gender Notes 
29  195  126   B    Female notes of some kind 
34  180  140   B    Male  different set of notes 
48  220  111   C    Male  blah blah 
55  189  109   C    Male  some more notes 

我想根据数值数据列的排名创建数据框的子划分。例如,如果我需要2名最古老的病人我的新的数据帧将看起来像这样:

Age Weight Blood Sugar Study Group Gender Notes 
48  220  111   C    Male  blah blah 
55  189  109   C    Male  some more notes 

rank功能看起来可能是有用的。我想我可以运行:

df2 = rank.df(axis=0) 

,然后找到某种方式来使用的指数DF2DF拉行到新dataframes。沿线的东西:

cutoff = df2[df2 > 10] 
# DELETE ROWS WITH NaN VALUES IN THE COLUMNS OF INTEREST 

虽然这感觉有点笨拙。我希望有一个更直接的说法,

“大熊猫,我想要一个新的数据框,其中有15个最老的人在这一个好!现在我想要一个新的数据框与20个最年轻的人,等等“

回答

1

一种选择是作为排序依据年龄数据框:

df = df.sort('Age') 

然后通过df['Age'].values[n]年龄的第n个最年轻的人,并通过df['Age'].values[-n]时代的第n个最老的人。

因此,要查看与谁是15个年纪最老的人一个数据框,你可以这样做:

df[df['Age'] >= df['Age'].values[-15]] 

另外,如果你只是想通过行数来限制返回(如别介意,可能有20人共享的,比方说,55年代最久),你可以只使用在分类数据框的headtail方法...

df_age = df.sort('Age', ascending=False) 

...然后df_age.head(15)会认为15的人,df_age.tail(20)会查看20个最小的人。

相关问题