如何匹配DataFrame列名与另一DataFrame时间索引并按时间差填充新列?
解决方案
核心思路:根据df_rates的索引(距基准时间的分钟数)计算出对应匹配时间,再用该时间戳从df_profit中提取对应利润值
步骤1:提取并转换基准时间
先把df_rates的列名(基准时间)转为datetime类型,方便后续时间运算:
import pandas as pd # 提取df_rates的基准时间列名 base_time = pd.to_datetime(df_rates.columns[0])
步骤2:计算每行的匹配时间
利用df_rates的索引(提前的分钟数),计算出需要和df_profit匹配的时间:
# 基准时间减去索引对应的分钟数,得到匹配时间 df_rates['match_time'] = base_time - pd.to_timedelta(df_rates.index, unit='m')
步骤3:匹配利润值并生成新列
确保df_profit的索引为datetime类型后,用map方法匹配对应利润值:
# 确保df_profit索引是datetime类型(若已满足可跳过) df_profit.index = pd.to_datetime(df_profit.index) # 匹配利润,无匹配项自动填充NaN df_rates['New_column'] = df_rates['match_time'].map(df_profit['Profit']) # 可选:删除中间辅助列match_time df_rates = df_rates.drop('match_time', axis=1)
最终结果
运行后得到的df_rates与预期一致:
2012-03-31 23:45:00 New_column Mins before time 0 113.1 3504.664 5 112.1 NaN 10 113.1 NaN 15 113.17 1215.760 20 103.17 NaN 25 133.17 NaN 30 101.39 -21.480
补充说明
- 若需要将NaN替换为空字符串或其他默认值,可使用
df_rates['New_column'] = df_rates['New_column'].fillna('') - 若df_profit存在重复时间戳,建议先处理重复项再进行匹配
内容的提问来源于stack exchange,提问作者Newlearner
相关产品推荐
相关产品推荐

