python - 按比例将 NaN 替换为现有值
问题描述
假设我有一个 Dataframe,它有一列Quality
,带有 values [Poor, Average, Good, Excellent]
。
该帧有 120 个值,其中 20 个是NaN
,其余 100 个值分别为 20、30、40、10 [Poor, Average, Good, Excellent]
。
是否有任何简单的方法可以使用 Python、Pandas 和 NumPy将 20NaN
行替换为以下值,以使整体框架的比例保持在 20% 差、30% 平均、40% 好和 10% 优秀?[Poor, Average, Good, Excellent]
这个想法是在填充后保留原始比例,NaN
而与数据集的大小无关。
解决方案
不确定是否有更简单的方法,我写了这个函数来实现我想要的。
def replace_with_proportion(frame, column):
isnull = frame[column].isnull()
sample = frame[column].dropna()
sample=set(sample)
countframe=pd.DataFrame(columns=["name", "count", "proportion"])
for x in sample:
countframe.loc[-1] = [x,frame.loc[frame[column] == x].shape[0], 0 ]
countframe.index = countframe.index + 1
countframe['proportion']=countframe['count']/countframe['count'].sum()
to_fill=np.random.choice(countframe['name'], size=(frame[column].isnull().sum(),), p=countframe['proportion'])
frame.loc[isnull, column] = to_fill
return frame
推荐阅读
- r - 我想使用 rbind 绑定多个数据框
- ios - 如何从一个视图控制器保存数据并使用核心数据在另一个视图控制器中显示
- samba - 在不中断 Windows 客户端负载的情况下重新启动 smbd 守护进程
- android - 无法应用委托:Android 中的 TFlite 崩溃
- angular - 如何从双地图获取数据(Angular - Spring)
- react-native - React Navigation:选项卡文本无法以小写形式显示
- sql-server - 我在尝试使用 Azure Function 将数据加载到 Azure 数据库时不断收到错误消息
- javascript - 映射和创建组件后,如何在两列中显示它与渲染次数相等?
- html - HTML5 中的文本换行
- database - msadox28.tlb 在注册时不是有效的 .Net 程序集文件