You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算两个DataFrame时间差:df1的time_1减df2所有time_2

解决方案:计算两个DataFrame时间差并合并指定列

要实现df1中每个time_1与df2中所有time_2配对计算差值,并保留指定列,可通过以下步骤完成:

步骤说明

  1. 生成两个DataFrame的笛卡尔积,让df1的每一行与df2的每一行一一配对;
  2. 计算time_1与time_2的差值,新增为结果列;
  3. 筛选并调整需要保留的列(差值列、df1的a/b/c列、df2的y列)。

完整代码

import pandas as pd

# 构造输入数据(对应题目中的df1和df2)
df1 = pd.DataFrame({
    'time_1': [1.675168e+09] * 10,
    'a': [-90.56, -87.98, -83.96, -85.58, -95.13] * 2,
    'b': [5.28, 5.27, 14.74, -5.72, -4.15] * 2,
    'c': [-6.23, -5.68, -9.44, -5.27, -5.46] * 2
})

df2 = pd.DataFrame({
    'time_2': [1.675168e+09, 1.675168e+09, 1.675169e+09, 1.675169e+09, 1.675170e+09],
    'y': [542.397494, 541.233179, 567.644365, 530.368776, 552.896863]
})

# 生成笛卡尔积(pandas 1.2.0+支持)
result = df1.merge(df2, how='cross')

# 计算时间差值
result['time_1 - time_2'] = result['time_1'] - result['time_2']

# 调整列顺序并保留指定列
result = result[['time_1 - time_2', 'a', 'b', 'c', 'y']]

# 查看结果
print(result)

兼容低版本pandas的方法

如果你的pandas版本低于1.2.0,可通过临时键列实现笛卡尔积:

# 添加临时键列
df1['temp_key'] = 1
df2['temp_key'] = 1

# 合并后删除临时键列
result = df1.merge(df2, on='temp_key').drop('temp_key', axis=1)

# 后续计算差值、筛选列步骤同上

结果示例

生成的结果DataFrame前5行如下(与题目期望格式一致):

time_1 - time_2      a      b     c          y
0            0.0  -90.56   5.28 -6.23  542.397494
1            0.0  -90.56   5.28 -6.23  541.233179
2         -1000.0  -90.56   5.28 -6.23  567.644365
3         -1000.0  -90.56   5.28 -6.23  530.368776
4         -2000.0  -90.56   5.28 -6.23  552.896863

内容的提问来源于stack exchange,提问作者user20777609

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:45:29