Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据缺失值的百分比计算数据帧中列的不同分位数范围?_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 如何根据缺失值的百分比计算数据帧中列的不同分位数范围?

Python 如何根据缺失值的百分比计算数据帧中列的不同分位数范围?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我试图从dataframe df计算A列和B列的分位数,但我想根据这些列缺失值的百分比计算不同的分位数 df = pd.DataFrame({'A': ['Bob', 'Jane', 'Alice', NA, NA, NA, 'Rob', 'Max'], 'B': ['Example', NA, NA, 'Test', 'Check', NA, NA, NA]}) 此外,由于A和B是字符格式,我想首先计算每列的每行长度,以便 df_count = pd.

我试图从dataframe df计算A列和B列的分位数,但我想根据这些列缺失值的百分比计算不同的分位数

df = pd.DataFrame({'A': ['Bob', 'Jane', 'Alice', NA, NA, NA, 'Rob', 'Max'], 
                   'B': ['Example', NA, NA, 'Test', 'Check', NA, NA, NA]})
此外,由于A和B是字符格式,我想首先计算每列的每行长度,以便

df_count = pd.DataFrame({'A': [3, 4, 5, 0, 0, 0, 3, 3], 
                       'B': [7, 0, 0, 4, 5, 0, 0, 0]})
然后根据缺失值的百分比计算A和B的新值的分位数

例如,如果A列缺失值的百分比大于90%,则我希望计算分位数(0.99),否则如果A列缺失值的百分比小于90%,则我希望计算分位数(0.10)

作为最后一步,我将在新的数据帧中写入分位数的值:

df_quant = pd.DataFrame({'A_quant': [quantile_value_for_A], 
                       'B_quant': [quantile_value_for_B]})
有办法做到这一点吗?非常感谢您的帮助。

使用:

df = pd.DataFrame({'A': ['Bob', 'Jane', 'Alice', np.nan,np.nan, np.nan, 'Rob', 'Max'], 
                   'B': ['Example', np.nan, np.nan, 'Test', 'Check', np.nan, np.nan, np.nan]})

df_count = pd.DataFrame({'A': [3, 4, 5, 0, 0, 0, 3, 3], 
                       'B': [7, 0, 0, 4, 5, 0, 0, 0]})



你好请花点时间阅读这篇文章,以及如何提供答案,并相应地修改你的问题。这些提示可能也很有用。超级,你能添加预期的输出吗?非常感谢!这正是我想要的!如果df有超过2列,您将如何编写代码?比如说100?@inegue-完全相同,没有指定的列,所以它会计算所有列。
#get percentage of NaNs
print (df.isna().mean())
A    0.375
B    0.625
dtype: float64

#compare by threshold, here 0.5 for test, with real data change to 0.9
thresh = .5
m = df.isna().mean() > thresh
print (m)
A    False
B     True
dtype: bool

#count both percentile
a = df_count.quantile(0.9999)
print (a)
A    4.9993
B    6.9986
Name: 0.9999, dtype: float64

b = df_count.quantile(0.999)
print (b)
A    4.993
B    6.986
Name: 0.999, dtype: float64

#set values by mask
out = np.where(m, a, b)
print (out)
[4.993  6.9986]
#create DataFrame
df_quant = pd.DataFrame([out], columns= m.index).add_suffix('_quant')
print (df_quant)
   A_quant  B_quant
0    4.993   6.9986