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

Pandas:基于另一DataFrame子串匹配计算列均值

解决方法:计算每个颜色的平均得分并合并到DataFrame

嘿,这问题我之前也碰到过,别慌,咱们一步步来搞定它!核心思路就是先把color_scores里的多颜色字符串拆成单独的颜色行,再计算每个颜色的平均分,最后把结果关联到color_avgs里。

方法一:分步拆解(清晰易懂)

  1. 拆分多颜色字符串并展开成行
    先把color_scores中每个单元格的颜色列表拆分成单独的条目,让每个颜色对应原来的分数:

    import pandas as pd
    
    color_scores = pd.DataFrame({'score': [12.4, 9.8, 7.4, 2.6, 14.8], 'colors': ['blue, red, green', 'blue, purple, orange', 'blue, pink, yellow', 'purple, pink, orange', 'yellow, pink, green']})
    color_avgs = pd.DataFrame({'colors': [ 'blue', 'red', 'green', 'purple', 'orange', 'pink', 'yellow', ]})
    
    # 拆分颜色字符串为列表,再展开成多行
    color_scores_exploded = color_scores.assign(colors=color_scores['colors'].str.split(', ')).explode('colors')
    

    这一步之后,color_scores_exploded会变成每行对应一个颜色和它的分数,比如:

    scorecolors
    12.4blue
    12.4red
    12.4green
    ......
  2. 计算每个颜色的平均分
    按颜色分组,对score列求平均值:

    color_avg_scores = color_scores_exploded.groupby('colors')['score'].mean().reset_index(name='avg_score')
    

    这里得到的color_avg_scores就是每个颜色对应的平均分数据框。

  3. 合并到color_avgs
    用merge把平均分关联到color_avgs中:

    color_avgs = color_avgs.merge(color_avg_scores, on='colors', how='left')
    

方法二:链式写法(简洁高效)

如果不想写太多中间变量,可以把步骤合并成一行,用map直接赋值:

color_avgs['avg_score'] = color_avgs['colors'].map(
    color_scores.assign(colors=color_scores['colors'].str.split(', '))
                .explode('colors')
                .groupby('colors')['score']
                .mean()
)

最终结果

运行完上面的代码后,color_avgs会变成这样:

colorsavg_score
blue9.866667
red12.400000
green13.600000
purple6.200000
orange6.200000
pink8.266667
yellow11.100000

这样就完美实现你想要的效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:23:38