SAS Proc 标准和 Python 中的等效项

问题描述 投票:0回答:1

SAS
中,Proc Standard允许用户将数据标准化为特定组的特定均值和标准差。 在这里,我想将每个姓氏的年龄标准化为
mean = 0
deviation =5
。我怎样才能在 Pandas 中做到这一点
df

SAS 代码:

data mydata;
input surname $ name $ age ;
datalines;
Lim John 25 
Lim David 100 
Tan Mary 50 
Tan Tom 30 ;
run;

PROC STANDARD MEAN=0 STD=5 DATA=mydata OUT=mydata11;
VAR age;
BY surname; 
 run;

SAS 输出

surname name    age
Lim John    -3.535533906
Lim David   3.5355339059
Tan Mary    3.5355339059
Tan Tom -3.535533906
python sas mean standard-deviation
1个回答
0
投票

按照 stats.stackexchange 的这个答案(将数据转换为所需平均值和标准差),我们可以定义一个函数来执行此操作:

def standard(x, mean, std): x_std = mean + (x-x.mean()) * std/x.std() return x_std
现在我们可以将它作为 lambda 函数应用于 df:

df = pd.DataFrame({'surname': ['Lim', 'Lim', 'Tan', 'Tan'], 'name': ['John', 'David', 'Mary', 'Tom'], 'age': [25, 100, 50, 30] } ) df_std = df.groupby('surname')['age'].apply(lambda x: standard(x, 0, 5))
surname   
Lim      0   -3.535534
         1    3.535534
Tan      2    3.535534
         3   -3.535534
我们可以确认这一点:

df_std.groupby('surname').mean() # Should be 0 df_std.groupby('surname').std() # Should be 5
    
© www.soinside.com 2019 - 2024. All rights reserved.