如何用每组中出现频率最高的值填充DataFrame中缺失的值? [英] How to fill missing values in a DataFrame with the most frequent value of each group?

查看:0
本文介绍了如何用每组中出现频率最高的值填充DataFrame中缺失的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含两列的 pandas DataFrame:toycolorcolor列包含缺少的值。

如何用该特定toy最频繁的color值填充缺失的color值?

以下是创建示例数据集的代码:

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'toy':['car'] * 4 + ['train'] * 5 + ['ball'] * 3 + ['truck'],
    'color':['red', 'blue', 'blue', np.nan, 'green', np.nan,
             'red', 'red', np.nan, 'blue', 'red', np.nan, 'green']
    })

以下是示例数据集:

      toy  color
0     car    red
1     car   blue
2     car   blue
3     car    NaN
4   train  green
5   train    NaN
6   train    red
7   train    red
8   train    NaN
9    ball   blue
10   ball    red
11   ball    NaN
12  truck  green

以下是所需结果:

  • 将第一个NaN替换为蓝色,因为这是汽车中最常见的color
  • 第二个和第三个NaN替换为红色,因为这是列车中最常见的color
  • 将第四个NaN替换为蓝色或红色,因为它们是并列的color

真实数据集备注:

  • 有许多不同的toy类型(不只是四种)。
  • 没有只有color缺少值的toy类型,因此答案不需要处理这种情况。

This question是相关的,但它没有回答我如何使用最频繁的值来填充缺少的值的问题。

推荐答案

可以使用groupby()+transform()+fillna()

df['color']=df['color'].fillna(df.groupby('toy')['color'].transform(lambda x:x.mode().iat[0]))

如果要在有2个或更多频繁值时选择随机值:

from random import choice

df['color']=df['color'].fillna(df.groupby('toy')['color'].transform(lambda x:choice(x.mode())))

这篇关于如何用每组中出现频率最高的值填充DataFrame中缺失的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆