比较具有相同形状的两个数据帧,并在行上迭代计算df1-line1到df2-line1的pct_change



我在计算形状相同的两个数据帧(日期时间索引+列0-2000(的差异(以%为单位(时遇到问题。我想比较df1的行和d2的行的值(df1-line1与df2-line1,df1-line2与df2-line2等(,并计算两个值之间的差,并将结果存储在新的数据帧中。我想按列比较属于同一时间(例如12:01(但数据帧具有不同日期的值(时间相同(的值。

这些是示例数据帧:

df1

A       B       
time      
2019-04-20 12:01       12     0.5      
2019-04-20 12:02       14      1      
2019-04-20 12:03       15     0.2     
2019-04-20 12:04       18      5       
2019-04-20 12:05       9       6       

df2:

A       B       
time      
2019-04-21 12:01       10     0.5      
2019-04-21 12:02       11     1.5    
2019-04-21 12:03        5      4      
2019-04-21 12:04       20      3       
2019-04-21 12:05        3      6     

预期输出:

A          B       
time      
12:01       -16.67       0      
12:02       -21.43      50     
12:03       -66.67    1900     
12:04        11.11     -40       
12:05       -66.67       0      

作为第一步,我已经尝试了panda合并和联接函数,但它们没有给我所需的输出。

然后我试着写一个函数:

def merge_calculate(df1, df2):
if len(df1) == len(df2):
return(((df2.values - df1.values)/df1.values)*100) #df1.values = start value, df2.values = end value

函数给了我一个数组,但我不确定计算是否按照我想要的方式进行。

我非常感谢您的意见!感谢

import datetime as dt
diff = -(df1.values - df2.values)/df1.values*100
date_time = [dt.datetime.strptime(d, "%Y-%m-%d %H:%M") for d in list(df1.index)]
time = [dt.datetime.time(d) for d in date_time]
df3=pd.DataFrame(data=diff,columns=df1.columns,index=time)

解释:

  • diff是df1和df2之间的比较,它是一个二维numpy数组
  • 您需要为diff分配索引和列,以便使其成为数据帧:
  • data=diff为数据帧分配数据
  • columns简单地等于columns=df1.columns
  • index=time是您从datetime中提取的time

print (df3)为您提供输出:

A       B
12:01:00 -16.666667    -0.0
12:02:00 -21.428571    50.0
12:03:00 -66.666667  1900.0
12:04:00  11.111111   -40.0
12:05:00 -66.666667    -0.0

最新更新