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

基于特定筛选条件在Pandas DataFrame中实现分组值复制与填充

Pandas按组提取指定条件值并填充整组新列

你要实现的是给每个giorno分组,提取组内ora=10对应的open值,再把这个值填充到该组所有行的新列里对吧?这里有两种简洁高效的方法可以解决:

方法一:用groupby + transform(推荐,适合大型数据集)

这种方法直接在分组后对每组应用逻辑,不用额外创建映射表,代码更紧凑:

# 对每个giorno分组,提取组内ora=10时的open值,广播填充整组
df['newColumn'] = df.groupby('giorno')['open'].transform(
    lambda group: group[df.loc[group.index, 'ora'] == 10].iloc[0]
)

代码解释:

  • groupby('giorno'):把数据按日期标识giorno分成独立的组
  • transform:会将lambda函数的结果广播到原DataFrame的对应行,保证新列和原数据行数一致
  • lambda函数里,我们在每个组中筛选出ora=10的行,取出对应的open值(用iloc[0]确保只取一个值,避免多个匹配的情况)

方法二:先创建映射字典再填充(更直观,适合理解逻辑)

先提前把每个giorno对应的目标值存成字典,再用map方法快速填充:

# 第一步:筛选出所有ora=10的行,生成giorno到open值的映射字典
giorno_open_mapping = df[df['ora'] == 10].set_index('giorno')['open'].to_dict()

# 第二步:用giorno列匹配字典,填充新列
df['newColumn'] = df['giorno'].map(giorno_open_mapping)

代码解释:

  • 第一行先筛选出ora=10的所有行,把giorno设为索引,然后转成字典,键是giorno,值是对应的open
  • 第二行用map方法,把每行的giorno对应到字典里的值,直接填充到newColumn中

两种方法都能得到你想要的结果,比如giorno=1的所有行newColumn都会是152.27,完全符合你的示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:53:09