как перебирать записи в списке при определении собственной функции

#python #pandas #list #function

#python #панды #Список #функция

Вопрос:

Я пытаюсь определить функцию с этими целями.

  • фрейм данных df
  • список стран (можно предположить, что все они находятся в location столбце фрейма данных) cl
  • строка (которую можно считать столбцом (отличным от местоположения), который будет найден во фрейме данных. column

Функция должна возвращать среднее значение для заданной метрики для заданного списка стран. с точки зрения непрофессионала. Я хочу, чтобы функция возвращала каждое заданное значение каждой страны в соответствии с тем, что column упомянуто. затем sum все записи в списке и разделите на len , если это список

g7 = ['United States', 'Italy', 'Canada', 'Japan', 'United Kingdom', 'Germany', 'France']

Пока это мой код:

 def countries_average(df,cl,column):
    average = []
    for country in enumerate(cl):
        x = df.loc[df["location"] == country, column]
        average.append(x)
        y = sum(average)/len(average)
        return average
  

вместо этого он возвращает строку из первой записи в списке. когда одна из записей в column total_deaths :

 [28543    127410.0
 Name: total_deaths, dtype: float64]
  

любая помощь в переборе этого списка и успешном добавлении в average список.
Я пытался range(len(cl)) , но это тоже не помогло. любая помощь будет оценена.

Ответ №1:

Я думаю, это должно сработать:

 def countries_average(df,cl,column):
    return df[df['location'].isin(cl)][column].mean()
  

Комментарии:

1. Это ничего не возвращает, все мои результаты ouyput Series([], Name: total_deaths, dtype: float64)

2. Если ваш x является числовым значением, то он должен работать. Не могли бы вы распечатать x?

3. Series([], Name: total_deaths, dtype: float64)

4. Измените «x = df.loc [df [«location»] == страна, столбец]» на «x = df.loc [df [«location»] == страна, столбец] [0]» (добавьте [0] в конце) и скажите мне, что вы получаете.

5. Я обновил код, теперь он не должен доставлять вам больше проблем.