我有一个包含两种类型类别的目标表:stationID 和 Month。我需要根据另一个引用表的值(通过匹配 stationID)对该表的温度值进行标准化。对于 pandas 来说,最好的方法是什么?
例如:
引用表:包含独特站点的平均值和标准差引用值
stationID | Temp_mean | Temp_std |... ----------+-------------+----------+ A | 30.0 | 3.4 | B | 31.1 | 4.5 | C | 24.5 | 0.2 | ...
目标表:包含每个站点和月份的原始数据
stationID | Mon | Temperature |... ----------+------+-------------+ A | 1 | 30.1 | A | 2 | 31.2 | A | 3 | 24.0 | B | 1 | 30.3 | C | 2 | 20.4 | C | 1 | 24.3 | C | 2 | 25.4 | ...
因此,我需要从目标表中的温度值中减去平均值,然后除以引用表的标准差。
到目前为止我所拥有的是下面的代码
df['Temperature_Stdized']=df(['stationID','Mon'])['Temperature'].transform(lambda x: (x - x.mean()) / x.std())
但是,我不想使用“x”中的平均值和标准差,而是想通过匹配 stationID 值来使用引用表中的值。
感谢任何帮助。谢谢。
最佳答案
考虑到您的引用表
为ref
,目标表
为tar
,您可以这样做:
tar['Temprature'] = (ref.merge(tar, on = 'stationID')
.eval('(Temperature - Temp_mean) / Temp_std'))
stationID Mon Temperature
0 A 1 0.029412
1 A 2 0.352941
2 A 3 -1.764706
3 B 1 -0.177778
4 C 2 -20.500000
5 C 1 -1.000000
6 C 2 4.500000
详细信息
第一步是merge
stationID
上的两个数据帧:
x = ref.merge(tar, on = 'stationID')
print(x)
stationID Temp_mean Temp_std Mon Temperature
0 A 30.0 3.4 1 30.1
1 A 30.0 3.4 2 31.2
2 A 30.0 3.4 3 24.0
3 B 31.1 4.5 1 30.3
4 C 24.5 0.2 2 20.4
5 C 24.5 0.2 1 24.3
6 C 24.5 0.2 2 25.4
然后eval
使用以下表达式标准化每一行:
x.eval('(Temperature - Temp_mean) / Temp_std')
0 0.029412
1 0.352941
2 -1.764706
3 -0.177778
4 -20.500000
5 -1.000000
6 4.500000
dtype: float64
关于python - Pandas /Python : Groupby and transform against a reference table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54116550/