gpt4 book ai didi

python - Pandas 按 groupby 上的列标准化

转载 作者:行者123 更新时间:2023-12-04 11:50:16 25 4
gpt4 key购买 nike

给定一个 Pandas 数据框,例如

import pandas as pd

df = pd.DataFrame({'id': ['id1','id1','id2','id2'] ,
'x': [1,2,3,4],
'y': [10,20,30,40]})
每个数值列都可以归一化为单位区间 [0,1]
columns = ['x', 'y']

for column in columns:
df[column] = (df[column] - df[column].min()) / (df[column].max() - df[column].min())
导致
    id         x         y
0 id1 0.000000 0.000000
1 id1 0.333333 0.333333
2 id2 0.666667 0.666667
3 id2 1.000000 1.000000
但是,如何在每个 id 的每个数字列上应用此规范化?预期的结果将在这个过于简单的例子中
    id         x         y
0 id1 0.000000 0.000000
1 id1 1.000000 1.000000
2 id2 0.000000 0.000000
3 id2 1.000000 1.000000
事实证明不清楚如何在之后更新每个标准化列
df.groupby(['id']).apply(lambda x: ...)

最佳答案

使用 GroupBy.transform :

columns = ['x', 'y']
g = df.groupby('id')[columns]
df[columns] = (df[columns] - g.transform('min')) / (g.transform('max') - g.transform('min'))

print (df)
id x y
0 id1 0.0 0.0
1 id1 1.0 1.0
2 id2 0.0 0.0
3 id2 1.0 1.0

关于python - Pandas 按 groupby 上的列标准化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66853103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com