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

如何在DataFrame中基于datetime匹配快速新增APL_price列?

高效实现Pandas新增匹配APL价格列的方法

嘿,完全不用写遍历函数!Pandas的向量化操作比手动循环高效太多了,这里有两种简洁的方案帮你搞定需求:

首先先还原你的示例数据:

import pandas as pd

data = {
    'name': ['APL', 'BBC', 'CPL', 'APL', 'BBC', 'CPL'],
    'datetime': ['10-1-12', '10-1-12', '10-1-12', '10-2-12', '10-2-12', '10-2-12'],
    'price': [1.92, 4.16, 4.99, 2.05, 5.16, 3.99]
}
df = pd.DataFrame(data)

方法一:用map快速映射(最简洁)

先提取APL的日期-价格映射关系,然后直接用datetime列去匹配:

# 构建APL的日期到价格的字典
apl_price_map = df[df['name'] == 'APL'].set_index('datetime')['price'].to_dict()

# 新增APL_price列
df['APL_price'] = df['datetime'].map(apl_price_map)

这样运行后,所有相同datetime的行都会自动匹配到对应APL的价格,APL自身的行也会显示自己的价格。如果想要把APL自身的APL_price设为null,只需要再加一行:

import numpy as np
df.loc[df['name'] == 'APL', 'APL_price'] = np.nan

方法二:用merge左连接(更灵活)

如果后续有更多关联需求,用合并的方式扩展性更强:

# 提取APL的日期和价格数据,重命名列
apl_df = df[df['name'] == 'APL'][['datetime', 'price']].rename(columns={'price': 'APL_price'})

# 按datetime左连接原DataFrame
df = df.merge(apl_df, on='datetime', how='left')

这种方法同样能实现需求,而且如果以后需要关联更多列,直接修改apl_df的列即可。

为什么这两种方法比遍历高效?

Pandas的map和merge都是底层优化的向量化操作,避免了Python层面的循环,处理大数据量时速度会比手动遍历快几十甚至上百倍,代码也更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:42