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

如何在Pandas中获取最接近0天的time delta列?

解决方案

步骤说明

  • 从透视后的宽表中提取所有time_delta相关列
  • 对每行的时间差值,通过计算天数平方的最小值定位最接近0的时间差(替代abs()方法)
  • 将结果作为新列添加到宽表中
  • 可选调整列顺序,优化输出格式

完整代码实现

import pandas as pd
import numpy as np

# 原始数据定义
gp_columns = {
'name': ['companyA', 'companyB'],
'firm_ID' : [1, 2],
'timestamp_one' : ['2016-04-01', '2017-09-01']
}

fund_columns = {
    'firm_ID': [1, 1, 2, 2, 2],
    'department_ID' : [10, 11, 20, 21, 22],
    'timestamp_mult' : ['2015-01-01', '2016-03-01', '2016-10-01', '2017-02-01', '2018-11-01'],
    'number' : [400, 500, 1000, 3000, 4000]
    }

# 初始化DataFrame并转换时间格式
gp_df = pd.DataFrame(gp_columns)
fund_df = pd.DataFrame(fund_columns)
gp_df['timestamp_one'] = pd.to_datetime(gp_df['timestamp_one'])
fund_df['timestamp_mult'] = pd.to_datetime(fund_df['timestamp_mult'])

# 合并数据并生成辅助列
merged_df = gp_df.merge(fund_df)
merged_df_v1 = merged_df.copy()
merged_df_v1['incidence_num'] = merged_df.groupby('firm_ID')['department_ID'].transform('cumcount') + 1
merged_df_v1['time_delta'] = merged_df_v1['timestamp_mult'] - merged_df_v1['timestamp_one']

# 透视生成宽表
merged_wide = pd.pivot(merged_df_v1, 
                       index=['name','firm_ID', 'timestamp_one'], 
                       columns='incidence_num', 
                       values=['department_ID', 'time_delta', 'timestamp_mult', 'number']).reset_index()

# 提取所有time_delta列
time_delta_cols = [col for col in merged_wide.columns if col[0] == 'time_delta']

# 计算最接近0的time_delta(用平方替代abs方法)
merged_wide['closest_time_delta'] = merged_wide[time_delta_cols].apply(
    lambda row: row.loc[np.argmin(row.dt.days ** 2)], axis=1
)

# 调整列顺序,将新列前置
cols = merged_wide.columns.tolist()
cols.insert(3, cols.pop(cols.index('closest_time_delta')))
merged_wide = merged_wide[cols]

# 输出结果
print(merged_wide)

结果说明

  • closest_time_delta列即为每个公司对应的所有时间差中最接近0的取值
  • 通过计算时间差天数的平方,利用平方值最小对应最接近0的特性,规避了abs()方法的使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:56:09