我不太习惯使用管道,所以我想知道如何使用自定义函数和管道。
情况:我想用平均值填充一些缺失值,但使用基于其他特征的组。这就是我使用这个自定义函数的原因:
def replaceNullFromGroup(From, To, variable, by):
# 1. Create aggregation from train dataset
From_grp = From.groupby(by)[variable].median().reset_index()
# 2. Merge dataframes
To_merged = To.merge(From_grp, on=by, suffixes=['_test', '_train'], how = "left")
# 3. Create dictionaries
to_cols = [col for col in To_merged.columns if 'test' in col]
from_cols = [col for col in To_merged.columns if 'train' in col]
dict_cols =dict(zip(to_cols, from_cols))
# 4. Replace null values
for to_col, from_col in dict_cols.items():
To_merged[to_col] = np.where(To_merged[to_col].isnull(),
To_merged[from_col],
To_merged[to_col])
# 5. Clean up dataframe
To_merged.drop(from_col, axis=1, inplace=True)
To_merged.columns = To_merged.columns.str.replace('_test', '')
return To_merged
变量含义:
- 来自:我获取信息的数据框(训练数据集)
- To:我将填充缺失值的数据框(训练和测试数据集)
- 变量:具有缺失值的变量
- 作者:我用来分组的变量
我可以在管道中使用此功能,以便可以使用交叉验证避免数据泄漏吗?
非常感谢你