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
相关产品推荐
相关产品推荐

