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
如果你需要的是得到满足这个条件的行,可以通过简单的切片来实现。让我们来看看它:
- 要获得 10% 分位数阈值,请使用
df['Column'].quantile(0.1)
- 要获取此列低于(或等于)此阈值的行,请使用
df['Column'].le(df['Column'].quantile(0.1))
(或等效地 df['Column'] <= df['Column'].quantile(0.1)
)。
- 前面的表达式给出了一个系列,其索引与 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%
我有一个数据框列,它是一组按降序排列的数字,我需要将最低的 %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
如果你需要的是得到满足这个条件的行,可以通过简单的切片来实现。让我们来看看它:
- 要获得 10% 分位数阈值,请使用
df['Column'].quantile(0.1)
- 要获取此列低于(或等于)此阈值的行,请使用
df['Column'].le(df['Column'].quantile(0.1))
(或等效地df['Column'] <= df['Column'].quantile(0.1)
)。 - 前面的表达式给出了一个系列,其索引与 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%