我在计算形状相同的两个数据帧(日期时间索引+列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