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

如何不分组为Pandas DataFrame添加基于'best usage'的source列?

无需分组实现Pandas添加分组对应'best'来源列

需求说明

给目标Pandas DataFrame添加一列best,该列值对应每个year分组中usage为'best'的source字段值。

输入数据集

import pandas as pd
df_in = pd.DataFrame({
    'year': [ 5, 5, 5, 
             10, 10, 
             15, 15, 
             30, 30, 30 ],
    'usage': ['farm', 'best', '',
               'manual', 'best',
               'best',  'city',
               'random', 'best', 'farm'  ],
    'value': [0.825, 0.83, 0.85,
              0.935, 0.96,
              1.12, 1.305,
              1.34, 1.34, 1.455],       
    'source': ['wood', 'metal', 'water',
               'metal', 'water',
               'wood',  'water',
               'wood', 'metal', 'water'  ]})

预期输出

print(df)
   year   usage  value source   best
0     5    farm  0.825   wood  metal
1     5    best  0.830  metal  metal
2     5          0.850  water  metal
3    10  manual  0.935  metal  water
4    10    best  0.960  water  water
5    15    best  1.120   wood   wood
6    15    city  1.305  water   wood
7    30  random  1.340   wood  metal
8    30    best  1.340  metal  metal
9    30    farm  1.455  water  metal

现有分组实现方案

grouped = df_in.groupby('usage').get_group('best')
grouped = grouped.rename(columns={'source': 'best'})
df = df_in.merge(grouped[['year','best']],how='outer', on='year')

无需分组的实现方法

这里提供两种无需使用groupby的实现方式:

方法一:构建映射字典后映射

通过布尔索引直接筛选出usage='best'的行,构建year到对应source的映射字典,再用map方法为原数据集添加best列:

# 构建year与对应best来源的映射字典
best_source_map = df_in[df_in['usage'] == 'best'].set_index('year')['source'].to_dict()
# 新增best列
df_in['best'] = df_in['year'].map(best_source_map)

方法二:布尔筛选后合并

直接用布尔索引提取目标行,再与原数据集按year合并,逻辑和原方案类似但无需分组操作:

# 提取usage为best的行,只保留year和source列并重命名
best_df = df_in.loc[df_in['usage'] == 'best', ['year', 'source']].rename(columns={'source': 'best'})
# 合并到原数据集
df = df_in.merge(best_df, on='year', how='outer')

这两种方法都能得到预期的输出结果,且全程没有使用groupby相关操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:18:29