Pandas - 根据选择列中的排名值创建新数据框

时间:2014-10-06 16:28:08

标签: python pandas dataframe

我有一个数据框,其中一些列包含数字数据,另一些包含文本。这基本上就是它的样子:

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)

然后找到一些方法来使用 df2 的索引将 df 中的行拖到新的数据帧中。有点像:

cutoff = df2[df2 > 10]
# DELETE ROWS WITH NaN VALUES IN THE COLUMNS OF INTEREST
但是,这感觉有点笨拙。我希望有更直截了当的说法,

" Pandas,我想要一个新数据框,其中包含15个最老的人。大!现在我想要一个包含20个最年轻人等的新数据框"

1 个答案:

答案 0 :(得分:1)

一种选择是按年龄对DataFrame进行排序:

df = df.sort('Age')

然后df['Age'].values[n]的第n个最年轻人的年龄和df['Age'].values[-n]的第n个最年长者的年龄。

因此,要查看具有15个最老年龄的人的DataFrame,您可以这样做:

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

或者,如果您只想限制返回的行数(例如,请注意,可能有20个人分享最老的年龄,比如55),您可以使用{{1已排序的DataFrame上的}和head方法...

tail

...然后df_age = df.sort('Age', ascending=False) 会查看15个人,df_age.head(15)会查看20个最年轻的人。