python - 比较具有相同形状的两个数据帧并迭代计算 df1 - line1 到 df2 - line1 的 pct_change 的行
问题描述
我在计算两个具有相同形状(datetimeindex + 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
作为第一步,我已经尝试过 pandas 合并和连接函数,但它们没有给我想要的输出。
然后我尝试编写一个函数:
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
是time
你从中提取的datetime
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
推荐阅读
- firebase - 事务中单个文档的多次更新是否会在 Firestore 中为每个更新分别产生写入成本
- django - 社交登录后将 Django 重定向到自定义页面,然后使用 ?next 重定向到上一页
- javascript - iPhone Chrome 在过滤数组时无法读取 Var 的字符串值
- json - 在 GetX Flutter 中使用模型来解析 JSON 数据是一种好习惯吗?
- arrays - 如何检查结构中是否存在值?
- go - 您如何优雅地退出 go uber fx 应用程序
- javascript - 为什么 console.log(value) 返回一个空字符串?
- html - 在 HTML 中的 jpg 上调整和覆盖 SVG 图像
- python - 如何配对列表的每两个元素?
- perl - Perl - Mojolicious Webpack 无法从文件加载应用程序