用条件二元指标填充缺失值

时间:2020-10-27 19:40:10

标签: python-3.x pandas dataframe data-science

我正在根据评估另一个特征变量的条件,寻找用1或0填充缺失值的方法。

数据集的简化形式:

**Show       Time_watched    Completed**
GOT             400            1
The Office     424            1
Breaking Bad    325            0
GOT             325            0
The Office      344            NaN
Breaking Bad    325            1

我想用以下条件填充缺失值: 如果该节目的“观看时间”大于观看的观看时间的平均/第三分位数,则用其他1填充0

在上面的示例中,要在已完成的列中填充NaN,理想情况下,功能应将344分钟与“办公室”节目的平均Time_watched进行比较,并决定插入1或0。

我正在尝试fillna,groupby,transform和lambda函数的不同组合,但无法生成所需的输出。 感谢帮助

1 个答案:

答案 0 :(得分:1)

尝试一下:

mean_val = df.groupby("Show")["Time_watched"].transform("mean")
df["Completed"] = (
    df["Completed"].fillna((df["Time_watched"] > mean_val)).astype(int)
)

输出:

           Show  Time_watched  Completed
0           GOT           400          1
1    The Office           424          1
2  Breaking Bad           325          0
3           GOT           325          0
4    The Office           344          0
5  Breaking Bad           325          1

首先,通过将groupbytransform一起使用show来计算平均值,然后比较每个值和fillna


分位数75%

q75 = df.groupby("Show")["Time_watched"].transform(pd.Series.quantile, q=.75)
df['Complete'] = df["Completed"].fillna((df["Time_watched"] > q75)).astype(int)

输出:

           Show  Time_watched  Completed  Complete
0           GOT           400        1.0         1
1    The Office           424        1.0         1
2  Breaking Bad           325        0.0         0
3           GOT           325        0.0         0
4    The Office           344        NaN         0
5  Breaking Bad           325        1.0         1