python - Pandas /Python : Groupby and transform against a reference table

标签 python pandas

我有一个包含两种类型类别的目标表: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/

相关文章:

python - 为什么python客户端收不到SSE事件?

python - 为我的计算值制作字典

python - 如何在matplotlib中基于x轴更改直方图颜色

python - 使用 pandas groupby 创建包含父数据框所有列的新数据框

pandas 结合滚动和重新采样

python-3.x - 高于阈值的数据帧列计数

python - ForeignKey 默认值中 int() 错误的文字无效

python - Conda环境下,如何升级一个pip安装的包?

python - 我如何使用蓝图将所有路由拆分为子模块

python - 当数据帧上存在混合数据类型时,为什么我无法使用 loc 赋值?即一些列有字符串,其他列有数字