如何基于已处理DataFrame实现新DataFrame的类sklearn fit_transform转换
实现类似fit_transform的分组转换方案
完全可行,核心思路是先从df1中拟合出分组规则和基准统计值,再将这些规则复用在df2上,具体步骤如下:
1. 从df1中拟合转换规则
先统一分组区间,计算并保存每个分组的RnkMeanGroup基准值(对应sklearn的fit阶段):
import pandas as pd import numpy as np # 初始化并处理df1 df1 = pd.DataFrame(np.random.randint(0, 101, (100, 2)), columns=['M', 'A']) max_min = 100 step = 5 # 统一分组区间(覆盖0-100所有数值) bins = range(0, max_min + step, step) df1['M_bin'] = pd.cut(df1['M'], bins=bins) # 计算组内A列降序排名并取整 df1['RnkGroup'] = df1.groupby('M_bin')['A'].transform('rank', ascending=False).round() # 提取每个分组的RnkMeanGroup基准值,保存为映射字典 rank_mean_mapping = df1.groupby('M_bin')['RnkGroup'].mean().round().to_dict()
2. 将规则应用到df2(对应sklearn的transform阶段)
用相同的分组逻辑处理df2,复用排名规则和从df1学到的基准值:
# 初始化df2 df2 = pd.DataFrame(np.random.randint(0, 101, (100, 2)), columns=['M', 'A']) # 1. 按相同区间对df2分组 df2['M_bin'] = pd.cut(df2['M'], bins=bins) # 2. 执行相同的组内降序排名取整操作 df2['RnkGroup'] = df2.groupby('M_bin')['A'].transform('rank', ascending=False).round() # 3. 映射df1中拟合的分组均值 df2['RnkMeanGroup'] = df2['M_bin'].map(rank_mean_mapping)
关键说明
- 分组区间是固定规则,直接复用即可覆盖所有0-100的数值;
RnkGroup的计算是通用的组内排名逻辑,对df2独立执行;RnkMeanGroup是从df1中学习到的分组基准值,确保df2使用和df1完全一致的均值规则。
内容的提问来源于stack exchange,提问作者luka
相关产品推荐
相关产品推荐

