基于特定筛选条件在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
相关产品推荐
相关产品推荐

