我正在根据评估另一个特征变量的条件,寻找用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函数的不同组合,但无法生成所需的输出。 感谢帮助
答案 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
首先,通过将groupby
与transform
一起使用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