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

Python按列中关键词分组求另一列统计量及KeyError问题解决

解决方法

你的错误根源是:str.contains()返回的是布尔值Series,这个对象里只有布尔标记,没有ROAS列,自然无法按列名索引。不需要分步操作,直接针对原DataFrame做分组或筛选+分组即可,以下是两种常见场景的实现:

场景1:按「是否包含关键词」分组统计(分两组:包含/不包含)

直接把布尔Series作为分组键,对原DataFrame的ROAS列做聚合:

import re

# 按是否包含'1 gal'分组,计算ROAS的均值
result = df_pi.groupby(df_pi['PROMOTED_PRODUCT__CREATIVE'].str.contains('1 gal', re.IGNORECASE))['ROAS'].mean()
# 如果要查看更完整的统计量,用describe()
result_detail = df_pi.groupby(df_pi['PROMOTED_PRODUCT__CREATIVE'].str.contains('1 gal', re.IGNORECASE))['ROAS'].describe()

输出结果会以True/False作为分组标签,直接展示两组的统计值,无需拆分DataFrame。

场景2:仅筛选包含关键词的行,按「产品名称」分组统计

如果你的需求是只保留包含'1 gal'的记录,再按产品名称分组,先筛选再分组:

# 先筛选符合条件的行,再按产品名称分组计算ROAS均值
filtered_df = df_pi[df_pi['PROMOTED_PRODUCT__CREATIVE'].str.contains('1 gal', re.IGNORECASE)]
result = filtered_df.groupby('PROMOTED_PRODUCT__CREATIVE')['ROAS'].mean()
# 同样支持describe()等多统计量输出
result_detail = filtered_df.groupby('PROMOTED_PRODUCT__CREATIVE')['ROAS'].describe()

这种方式会只展示包含关键词的产品分组统计结果,所有数据都在一个聚合结果对象里。

补充:自定义多个统计量

如果需要同时输出均值、中位数、最大值等,可以用agg()指定多个统计方法:

result_multi = filtered_df.groupby('PROMOTED_PRODUCT__CREATIVE')['ROAS'].agg(
    均值='mean',
    中位数='median',
    最大值='max',
    统计详情='describe'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:05:24