Циклы, которые производят разные значения для каждого элемента в списке - PullRequest
0 голосов
/ 13 июля 2020

У меня есть al oop, который просматривает список стран в списке, и я хочу найти общее количество по каждой из них и поместить его как новый объект с названием страны. Итак, мне нужен список в конце: australia_total, brazil_total, et c, в котором указано общее количество для каждой страны.

Последняя строка в коде - та, которая не работает

for c in countrylist:
  country = data[data.country == c]
  
  pivotcountry = country.pivot_table(['new_cases','new_deaths'], index='week', aggfunc='sum', margins=False)
  pivotcountry.reset_index(level=0, inplace=True)
  {c}_total = pivotcountry.new_cases.iloc[-1]

1 Ответ

0 голосов
/ 13 июля 2020

Если вы хотите, чтобы итоги отображались в новом DataFrame, вам нужно будет добавлять новую строку для каждого раза вокруг l oop:

import pandas

data = pandas.read_csv(r"WHO-COVID-19-global-data.csv", skipinitialspace=True)

countrylist = data.Country.unique()

out_columns = ['Country', 'Total_cases', 'Total_deaths']
out_data = pandas.DataFrame(columns=out_columns)

for c in countrylist:
  country = data[data.Country == c]

  case_total = country['New_cases'].sum()
  deaths_total = country['New_deaths'].sum()
  out_data = out_data.append(pandas.DataFrame([[c, case_total, deaths_total]], columns=out_columns))

print(out_data)

Gives:

                               Country Total_cases Total_deaths
0                          Afghanistan       34451         1010
0                              Albania        3571           95
0                              Algeria       19195         1011
0                              Andorra         855           52
0                               Angola         506           26
..                                 ...         ...          ...
0   Venezuela (Bolivarian Republic of)        9178           85
0                             Viet Nam         372            0
0                                Yemen        1469          418
0                               Zambia        1895           42
0                             Zimbabwe         985           18

[216 rows x 3 columns]

Но если вам действительно нужна переменная Python для каждой страны, вы можете использовать словарь locals():

import pandas

data = pandas.read_csv(r"WHO-COVID-19-global-data.csv", skipinitialspace=True)

countrylist = data.Country.unique()

for c in countrylist:
  country = data[data.Country == c]

  case_total = country['New_cases'].sum()
  locals()['%s_total' % (c.lower())] = case_total

print("Australia: %s" % australia_total)
print("Germany: %s" % germany_total)

Однако я бы не рекомендовал использовать locals() для установки новых переменные, поскольку для тех, кто читает код, не очевидно, что новые имена переменных создаются без использования традиционного оператора присваивания foo = 123.

...