Python:从DataFrame中提取下分位数

Python: Extracting the lower quantile from a DataFrame

我有一个数据框列,它是一组按降序排列的数字,我需要将最低的 %10 分配给一个新的数据框。但我找不到提取最低 %10 的方法。提前致谢。

我尝试的第一个函数是 percentile numpy 的函数。

import numpy as np
import pandas as pd


df['Column']` #which has 2400 number

array1 = np.array(df['Column'])

np.percentile(array1,10)` #gave me the variable which is the %10 (just 1 variable) but I need the list of lowest %10

我试过的第二个代码是 pandas

cut 函数
pd.qcut(df['Column'], q =10) # divides the dataframe to 10 equal piece. But I couldn't find a way to extract lowest %10 

如果你需要的是得到满足这个条件的行,可以通过简单的切片来实现。让我们来看看它:

  1. 要获得 10% 分位数阈值,请使用 df['Column'].quantile(0.1)
  2. 要获取此列低于(或等于)此阈值的行,请使用 df['Column'].le(df['Column'].quantile(0.1))(或等效地 df['Column'] <= df['Column'].quantile(0.1))。
  3. 前面的表达式给出了一个系列,其索引与 df 的索引匹配,值 True/False 其中值匹配/不匹配条件。这样的系列可以作为索引传递给 df 以仅过滤所需的行。

总结一下,你要的是:

df_2 = df[df['Column'].le(df['Column'].quantile(0.1))]

已编辑:对于前 10%,同样使用

df_2 = df[df['Column'].ge(df['Column'].quantile(0.9))]

已编辑(同样,根据 OP 的评论):

如果您需要获得准确的数字(例如,恰好是数据集的 10%,不考虑重复值),您可以按相关列对数据框进行排序,然后选择 top/bottom n 值(其中 n 可能是 df.shape[0]//10),如下所示:

df_2 = df.sort_values('Column').tail(df.shape[0]//10) # top 10%
df_2 = df.sort_values('Column').head(df.shape[0]//10) # bottom 10%