计算两个DataFrame时间差:df1的time_1减df2所有time_2
解决方案:计算两个DataFrame时间差并合并指定列
要实现df1中每个time_1与df2中所有time_2配对计算差值,并保留指定列,可通过以下步骤完成:
步骤说明
- 生成两个DataFrame的笛卡尔积,让df1的每一行与df2的每一行一一配对;
- 计算
time_1与time_2的差值,新增为结果列; - 筛选并调整需要保留的列(差值列、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
相关产品推荐
相关产品推荐

