Fillna with mode column by column

问题描述

我得到了一些这样的:x:用户 y:评级

显示用户 1 给电影 1 评分 4.0 用户 1 没有给电影 2 评分 用户 1 给电影 3 评分 1.0 等等

       rating
movieId 1      2      3      4     5   .....
userID
1      4.0    NaN     1.0   4.1    NaN
2      NaN      2     5.1   NaN    NaN
3      3.0    2.0     NaN   NaN    NaN
4      5.0    NaN     2.8   NaN    NaN

我如何用电影模式填充 NaN 值

示例 movieId 1 的评分为 4.0、NaN、3.0、5.0 ..... 然后用 4.0(mode) 填充 NaN,我尝试使用 fillna

rating.apply(lambda x: x.fillna(x.mode().item()))

解决方法

试试

rating.apply(lambda x: x.fillna(x.mode()),axis=0)

指定axis=0

或者,

import numpy as np
import pandas as pd

def fillna_mode(df,cols_to_fill):
    for col in cols_to_fill:
        df[col].fillna(df[col].mode()[0],inplace=True)

sample = {1: [4.0,np.nan,1.0,4.1,np.nan],2: [np.nan,2,5.1,np.nan]}

rating = pd.DataFrame(sample)
print(rating)
      1 2
0   4.0 NaN
1   NaN 2.0
2   1.0 5.1
3   4.1 NaN
4   NaN NaN
fillna_mode(rating,[1,2])

输出

    1   2
0   4.0 2.0
1   1.0 2.0
2   1.0 5.1
3   4.1 2.0
4   1.0 2.0