首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在从多个组中选择多个数据时避免使用KeyError

在从多个组中选择多个数据时避免使用KeyError
EN

Stack Overflow用户
提问于 2022-12-02 06:10:31
回答 2查看 35关注 0票数 0

我试图通过使用.groupby从某个月添加某些品牌的某些值,但我仍然得到相同的错误: KeyError:('Acura','1','2020')

这个值确实存在于我要导入的文件中:

代码语言:javascript
运行
复制
ANIO    ID_MES  MARCA   MODELO  UNI_VEH
2020    1   Acura   ILX 6
2020    1   Acura   Mdx 19
2020    1   Acura   Rdx 78
2020    1   Acura   TLX 7
2020    1   Honda   Accord- 195
2020    1   Honda   BR-V    557
2020    1   Honda   Civic   693
2020    1   Honda   CR-V    2095

代码语言:javascript
运行
复制
import pandas as pd
import matplotlib.pyplot as plt

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


def sumMonthValues (year, brand):
    count = 1
    sMonthSum = []
    if anio == 2022:
        months = 10
    else:
        months = 12
    while count <= months:
        month = 1
        monthS = str(mes)
        BmY = df.groupby(["BRAND","ID_MONTH","YEAR"])
        honda = BmY.get_group((brand, monthS, year))
        sales = honda["UNI_SOL"].sum()
        sMonthSum += [sales]
        month = month + 1
    return sumasMes


year = 2020
brand = ('Acura')

chuck = sumMonthValues (year, brand)

print (chuck)

我是如何分组数据的,有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-12-02 06:35:58

如果需要通过year, brand和月份筛选year, brand,则可以避免使用DataFrame.loc和掩码-如果标量通过Series.eq进行比较,如果多个值使用Series.isin

代码语言:javascript
运行
复制
def sumMonthValues (year, brand):
    
    months = 10 if year == 2022 else 12
    
    mask = (df['ID_MES'].isin(range(1, months+1)) &
            df['ANIO'].eq(year) & 
            df['MARCA'].isin(list(brand)))
    
    return df.loc[mask, "UNI_VEH"].sum()

year = 2020
#one element tuple - added ,
brand = ('Acura', )

chuck = sumMonthValues (year, brand)
print (chuck)
110
票数 0
EN

Stack Overflow用户

发布于 2022-12-02 17:21:25

因此,我找到了它:存储从给定的年销售额和品牌每月之和给出的价值。

代码语言:javascript
运行
复制
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel("ventasHondaMexico2020-2019.xlsx")

def sumMonthValues (year, brand):
    
    sMonthSum = []
    months = 10 if year == 2022 else 12
    nmes = 1
    mes = [nmes]
    while nmes <= months:
        mask = (df['ID_MES'].isin(mes) &
                df['ANIO'].eq(year) & 
                df['MARCA'].isin(list(brand)))
        nmes = nmes +1
        mes = [nmes]
        sumMes = df.loc[mask, "UNI_VEH"].sum()
        sMonthSum += [sumMes]
    return sMonthSum
        

year = 2020
#one element tuple - added ,
brand = ('Acura', )
conteo = 1 
chuck = sumMonthValues (year, brand)
print (chuck)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74651550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档