【问题标题】:Replacing NaN values in a column with the mode of a particular Category in that the column将列中的 NaN 值替换为该列中特定类别的模式
【发布时间】:2020-10-13 07:37:20
【问题描述】:
df['Android Ver'].fillna(str(df.groupby('Category')['Android Ver'].mode()), inplace=True)

这段代码出错了! 我想用应用程序的特定“类别”中的“Android Ver”列的模式填充“Android Ver”列中的 NaN 值,以便美容应用程序的“Android Ver”列获得 Android 版本的模式仅在数据集中的美容应用程序。 Link to Jupyter Notebook

【问题讨论】:

  • df.groupby('Category')['Android Ver'].mode() 返回一个数据框,而不是单个值。另请提供MWE
  • 抱歉,我现在提供了一个指向我的笔记本的链接。你现在可以看看它并帮助我吗,谢谢!

标签: python data-analysis data-cleaning


【解决方案1】:

如果您运行df.loc[df['Android Ver'].isna()],您会看到列中只有两个 NaN,因此在这种情况下您可以手动替换它们。但这是一个(肯定不是最佳的)通用解决方案:

import pandas as pd
df = pd.read_csv('./datasets/apps.csv', index_col=0)
mode_dict = dict(df.groupby('Category')['Android Ver'].agg(lambda x: x.mode()))
df['Android Ver'].loc[df['Android Ver'].isna()] = df.loc[df['Android Ver'].isna()].apply(lambda x: mode_dict[x.Category],axis=1)

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2018-12-22
  • 2020-04-14
  • 1970-01-01
  • 2013-03-12
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多