用分类变量中用户定义的值替换 nan 值

Replace nan values by user defined values in categorical variables

考虑 pandas 数据帧中的分类变量,其中一些条目是 NaN 值,例如

User Name
1     Joe 
2     nan    
3     Joe     
4    Mark  
5     nan  
6     Joe

我想用保留名称频率的用户定义函数替换 nan 值,即将权重 [0.75, 0.25] 分配给 ['Joe', 'Mark']分别。这可以使用 random.choices 轻松完成,我如何使用 pandas 将值插入到数据帧中?

value_countsnormalize=True 得到权重,然后用 loc

设置空值
import numpy as np

p = df.Name.value_counts(normalize=True)  # Series of probabilities
m = df.Name.isnull()

np.random.seed(42)
rand_fill = np.random.choice(p.index, size=m.sum(), p=p)
#array(['Joe', 'Mark'], dtype=object)

df.loc[m, 'Name'] = rand_fill

#   User  Name
#0     1   Joe
#1     2   Joe
#2     3   Joe
#3     4  Mark
#4     5  Mark
#5     6   Joe