Python:从DataFrame提取较低的分位数

问题描述 投票:0回答:1

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

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

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

我尝试过的第二个代码是熊猫的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 
python python-3.x pandas percentile
1个回答
1
投票

如果需要获取满足此条件的行,则可以通过简单的切片来实现。让我们来看看:

  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%,而不考虑重复的值),则可以按相关列对数据框进行排序,并选择顶部/底部的[[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%
© www.soinside.com 2019 - 2024. All rights reserved.