【问题标题】:How to fill missing values in a DataFrame with the most frequent value of each group?如何用每组中最频繁的值填充 DataFrame 中的缺失值?
【发布时间】:2021-10-21 05:40:18
【问题描述】:

我有一个带有两列的 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 替换为 blue,因为这是汽车最常见的color
  • 第二个和第三个 NaN 替换为 red,因为这是火车最常见的color
  • 第四个 NaN 替换为 蓝色或红色,因为它们与最常见的 color 并列。

关于真实数据集的说明:

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

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

【问题讨论】:

    标签: python pandas dataframe missing-data


    【解决方案1】:

    你想fillnamode

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

    【讨论】:

      【解决方案2】:

      你可以使用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())))
      

      【讨论】:

      • 击败我,+1 ;)
      • 这不是用每个玩具最常见的颜色替换所有颜色吗?即每辆车的颜色都替换为蓝色。
      • @norie ohh..yes 已更正...感谢您的关注:)
      猜你喜欢
      • 2021-07-06
      • 1970-01-01
      • 2022-11-25
      • 2016-08-26
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多