Как я могу сократить код, используя цикл for. Я просто не могу использовать для этой функции.

def f(year):
    
        if year==2017:
            plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[0,1:5])
    
        elif year==2016:
             plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[1,1:5])
        elif year==2015:
             plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[2,1:5])
        elif year==2014:
             plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[3,1:5])
        elif year==2013:
             plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[4,1:5])
        elif year==2012:
             plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[5,1:5])
        elif year==2011:
             plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[6,1:5])
        elif year==2010:
             plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[7,1:5])
0
Rishabh Gupta 12 Фев 2021 в 08:19

1 ответ

Лучший ответ

Не используйте цикл for, используйте математику:

def f(year):
    if year not in range(2010, 2018):
        return
    plt.bar(["NA_Sales","JP_Sales","EU_Sales","Other_Sales"],abc.iloc[2017-year,1:5])

Существует прямая линейная связь между year и переменной частью нижнего индекса iloc - вы можете выразить это как 2017-year и выполнить всю эту функцию в одной строке (плюс проверка ошибок для ловят недействительные годы).

1
Samwise 12 Фев 2021 в 05:23