能否用存储文本或列表的变量作为pandas中.get_group的分组参数?
问题解答
可以使用变量作为get_group的分组类别,但你的代码存在两个关键问题:
错误原因
- 参数格式错误:当
groupby使用多个分组键时,get_group要求传入元组而非列表作为分组组合,这是报错ValueError: must supply a tuple to get_group with multiple grouping keys的直接原因。 - 逻辑错误:你定义的
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
相关产品推荐
相关产品推荐

