【问题标题】:Pandas - Create new dataframes based on ranked values in select columnsPandas - 根据选择列中的排名值创建新数据框
【发布时间】:2014-10-06 16:28:08
【问题描述】:

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

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

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

“熊猫,我想要一个新的数据框,其中包含 15 个最年长的人。太好了!现在我想要一个包含 20 个最年轻的人的新数据框,等等”

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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 岁),您可以只使用 head 和 @排序后的 DataFrame 上的 987654326@ 方法...

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

    ...然后df_age.head(15) 将查看 15 个人,df_age.tail(20) 将查看 20 个最年轻的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-16
      • 2020-10-25
      • 2015-03-24
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      相关资源
      最近更新 更多