我有一个数据框,其中一些列包含数字数据,另一些包含文本。这基本上就是它的样子:
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个最年轻人等的新数据框"
答案 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个最年轻的人。