使用其他数据框中的变量将函数应用于pd数据框中的所有列

时间:2019-02-07 15:11:35

标签: python pandas numpy

我有一系列数据帧,有些保存静态值,有些是时间序列。

我已经可以添加

我想将一个时间序列的值转置为新时间序列,并应用一个函数,该函数从原始时间序列数据帧和保存静态值的数据帧中提取值。

下面是时间序列和静态数据帧的片段。

Time series dataframe (Irradiance)
Datetime             Date        Time    GHI  DIF  flagR   SE    SA  TEMP                                                          
2017-07-01 00:11:00  01.07.2017  00:11    0    0      0  -9.39 -179.97  11.1   
2017-07-01 00:26:00  01.07.2017  00:26    0    0      0  -9.33 -176.47  11.0   
2017-07-01 00:41:00  01.07.2017  00:41    0    0      0  -9.14 -172.98  10.9   
2017-07-01 00:56:00  01.07.2017  00:56    0    0      0  -8.83 -169.51  10.9   
2017-07-01 01:11:00  01.07.2017  01:11    0    0      0  -8.40 -166.04  11.0 

Static dataframe (Properties)
         Bearing (degrees)  Inclination (degrees)
Home ID                                          
151631                 244                     29
151632                 244                     29
151633                 184                     44

我编写了一个函数,该函数要使用这两个函数中的值来填充新的数据框。

def dif(DIF, Inclination, GHI):
    global Albedo
    return DIF * (1 + math.cos(math.radians(Inclination)) / 2) + (GHI * Albedo * (1 - math.cos(math.radians(Inclination)) / 2))

当我尝试做同样的事情时,但是在同一数据帧中,我使用了Numpy向量化功能,所以我认为我可以使用以下代码遍历新数据帧的每一列。

for column in DIF:
    DIF[column] = np.vectorize(dif)(irradiance['DIF'], properties.iloc['Inclination (degrees)'][column], irradiance['GHI'])

相反,这会引发以下错误。

TypeError: cannot do positional indexing on <class 'pandas.core.indexes.numeric.Int64Index'> with these indexers [Inclination (degrees)] of <class 'str'>

我已经检查了dtypes的Inclination(degrees)值,但是它以Int64而不是str的形式返回,所以我不确定为什么会产生此错误。

我显然在这里缺少重要的东西。是否有其他更好或更有效的替代方法?任何帮助将不胜感激。

0 个答案:

没有答案