我有一个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
如果需要获取满足此条件的行,则可以通过简单的切片来实现。让我们来看看:
df['Column'].quantile(0.1)
df['Column'].le(df['Column'].quantile(0.1))
(或等效地,为df['Column'] <= df['Column'].quantile(0.1)
)。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%