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

能否用存储文本或列表的变量作为pandas中.get_group的分组参数?

问题解答

可以使用变量作为get_group的分组类别,但你的代码存在两个关键问题:

错误原因

  1. 参数格式错误:当groupby使用多个分组键时,get_group要求传入元组而非列表作为分组组合,这是报错ValueError: must supply a tuple to get_group with multiple grouping keys的直接原因。
  2. 逻辑错误:你定义的brand是包含多个值的列表,但groupby(["Brand","Year"])生成的分组是单个品牌+单个年份的组合,get_group只能提取单个分组,无法直接传入列表一次性获取多个品牌的分组数据。

解决方案

方案一:直接用布尔索引筛选(更高效)

如果目标是获取多个品牌在指定年份的销售数据,无需借助groupby和get_group,直接用布尔索引筛选即可:

import pandas as pd

df = pd.read_excel("HondaSales.xlsx")

brand_list = ["honda", "acura"]
year = "2020"

# 筛选符合品牌列表和年份的行
filtered_data = df[(df["Brand"].isin(brand_list)) & (df["Year"] == year)]
sales_sum = filtered_data["UNI_VEH"].sum()
print(f'Sales of {brand_list} in {year}: {sales_sum}')

方案二:遍历分组键获取多个分组(需用groupby场景)

如果必须基于groupby结果获取多个分组,可遍历品牌列表,逐个调用get_group后合并结果:

import pandas as pd

df = pd.read_excel("HondaSales.xlsx")

brand_list = ["honda", "acura"]
year = "2020"

brand_year_groups = df.groupby(["Brand", "Year"])
group_dfs = []

for brand in brand_list:
    try:
        # 传入元组格式的分组键(单个品牌+年份)
        group_df = brand_year_groups.get_group((brand, year))
        group_dfs.append(group_df)
    except KeyError:
        # 跳过无数据的品牌-年份组合
        continue

if group_dfs:
    combined_df = pd.concat(group_dfs)
    sales_sum = combined_df["UNI_VEH"].sum()
    print(f'Sales of {brand_list} in {year}: {sales_sum}')
else:
    print(f'No sales data found for {brand_list} in {year}')

内容的提问来源于stack exchange,提问作者Adrián Desentis Flores

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:15:32