计算 groupby 中的 nanmean 并根据子组将此均值应用于 DF 列
Posted
技术标签:
【中文标题】计算 groupby 中的 nanmean 并根据子组将此均值应用于 DF 列【英文标题】:Calculate nanmean in groupby and apply this mean to DF column according to subgroup 【发布时间】:2021-07-04 23:21:48 【问题描述】:我正在尝试为我的 DataFrame 中的 user_score 列填充缺失值。数据当前是字符串,包括'tbd'
。我希望用NaN
替换'tbd'
值,然后将该列转换为浮点数,然后按游戏类型计算user_score
平均值并将此平均值应用于user_score
列中的每个NaN 值,基于它们类型(而不是使用整体 user_score 平均值)。
games['user_score'] = games['user_score'].replace('tbd', np.nan, inplace=True)
games['user_score'] = games['user_score'].astype(float)
#genre_mean = games.groupby('genre').agg('user_score':np.mean)
games['user_score'] = games.groupby('genre', sort=False)['user_score'].apply(lambda x: x.fillna(x.mean()))
print(games.groupby('genre').agg('user_score':np.mean))
print(games['user_score'].head(10))
现在,当我在代码末尾打印 groupby 时,它会向我显示每个类型的 user_score 的平均值,作为每个类型的 NaN。然后我尝试在应用函数中使用.nanmean()
,但它给了我一个错误。如何根据游戏类型将每个游戏类型的 user_score 平均值应用于 user_score 列中的缺失值?
谢谢!
【问题讨论】:
【参考方案1】:user_score
在第一行变为空:
games['user_score'] = games['user_score'].replace('tbd', np.nan, inplace=True)
如果你指定user_score
和同时使用inplace=True
,那将清除user_score
。
要么不使用inplace
,要么分配回来:
games['user_score'] = games['user_score'].replace('tbd', np.nan)
或者使用inplace
而不分配回:
games['user_score'].replace('tbd', np.nan, inplace=True)
【讨论】:
非常感谢,成功了!!现在也很有意义。以上是关于计算 groupby 中的 nanmean 并根据子组将此均值应用于 DF 列的主要内容,如果未能解决你的问题,请参考以下文章