python - sklearn MinMaxScaler() 与 groupby pandas

标签 python pandas scikit-learn

我有两个特征排名评级,针对不同类别下的不同产品ID,这些特征是在不同日期从电子商务网站上抓取的。

此处提供示例数据框:

import pandas as pd
import numpy as np
import warnings; warnings.simplefilter('ignore')
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import RobustScaler

df=pd.read_csv('https://raw.githubusercontent.com/amanaroratc/hello-world/master/testdf.csv')
df.head()

      category                bid         date  rank    ratings
0   Aftershave  ASCDBNYZ4JMSH42B    2021-10-01  61.0    462.0
1   Aftershave  ASCDBNYZ4JMSH42B    2021-10-02  69.0    462.0
2   Aftershave  ASCDBNYZ4JMSH42B    2021-10-05  89.0    463.0
3   Aftershave  ASCE3DZK2TD7G4DN    2021-10-01  309.0   3.0
4   Aftershave  ASCE3DZK2TD7G4DN    2021-10-02  319.0   3.0

我想使用 sklearn 中的 MinMaxScaler() 标准化 rank ratings

我试过了

cols=['rank','ratings']
features=df[cols]
scaler1=MinMaxScaler()
df_norm[['rank_norm_mm', 'ratings_norm_mm']] = scaler1.fit_transform(features)

这对整个数据集进行标准化。 我想使用 groupby 对每个特定日期的每个类别执行此操作。

最佳答案

使用GroupBy.apply :

file = 'https://raw.githubusercontent.com/amanaroratc/hello-world/master/testdf.csv'
df=pd.read_csv(file)

from sklearn.preprocessing import MinMaxScaler

cols=['rank','ratings']

def f(x):
    scaler1=MinMaxScaler()
    x[['rank_norm_mm', 'ratings_norm_mm']] = scaler1.fit_transform(x[cols])
    return x

df = df.groupby(['category', 'date']).apply(f)

另一个解决方案:

file = 'https://raw.githubusercontent.com/amanaroratc/hello-world/master/testdf.csv'
df=pd.read_csv(file)

from sklearn.preprocessing import MinMaxScaler

scaler1=MinMaxScaler()
cols=['rank','ratings']

df= df.join(df.groupby(['category', 'date'])[cols]
               .apply(lambda x: pd.DataFrame(scaler1.fit_transform(x), index=x.index))
               .add_prefix('_norm_mm'))
        

关于python - sklearn MinMaxScaler() 与 groupby pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69476352/

相关文章:

python - pandas get_dummies 无法处理测试数据中看不见的标签

python - 将 OpenCV IplImage* 数据转换为 numpy 数组

python - 当 request.POST 在 django 中包含查询字符串时的示例

python-3.x - 将 Pandas 中的 6 位日期格式转换为标准日期格式

python - 使用 Python 和 Pandas 将基于另一列的列组合起来

python - 来自 scikits cross_val_score 的所有类别的 f1 分数

使用 2 个以上列表的 Python AND 运算符

python - 为 python 应用程序创建 DEB 文件

python - 将概率与 scikit-learn 中的标签联系起来

python - 如何从多项式拟合中提取方程?