Есть ли более эффективный способ сделать это sh? - PullRequest
0 голосов
/ 08 мая 2020
TB_data_EMR = TB_data[TB_data["g_whoregion"] == "EMR"]
e_inc_num_by_EMRyear = []
for x in list_of_years:
    def data_by_year(x):
        TB_data_EMRyear = TB_data_EMR[TB_data_EMR["year"]==x]
        return TB_data_EMRyear["e_inc_num"].sum()
    e_inc_num_by_EMRyear.append(data_by_year(x))

Мне нужно повторить этот код для всех категорий в моем столбце «g_whoregion». Есть ли хороший способ создать функцию для выполнения sh этой задачи, вместо того, чтобы повторно набирать код и просто подставлять различные имена категорий, как показано ниже:

TB_data_AFR = TB_data[TB_data["g_whoregion"] == "AFR"]
e_inc_num_by_AFRyear = []
for x in list_of_years:
    def data_by_year(x):
        TB_data_AFRyear = TB_data_AFR[TB_data_AFR["year"]==x]
        return TB_data_AFRyear["e_inc_num"].sum()
    e_inc_num_by_AFRyear.append(data_by_year(x))

В идеале мне бы понравился фрейм данных, который содержит общее количество «e_inc_num» (инцидентных случаев) на «year» для каждого региона в «g_whoregion», если это имеет смысл, но я не знаю, как это сделать sh. Моя конечная цель - создать линейный график, показывающий заболеваемость в заданный год для каждого региона.

1 Ответ

1 голос
/ 08 мая 2020

Определите, что одинаково, а что отличается. Создайте единую функцию того же самого. Параметризуйте его с учетом различий.

def regions_by_year(tb_data_region_type):
    TB_data_region = TB_data[TB_data["g_whoregion"] == tb_data_region_type]
    e_inc_num = []
    for x in list_of_years:
        def data_by_year(x):
            TB_data_region_year = TB_data_region[TB_data_region["year"]==x]
            return TB_data_region_year["e_inc_num"].sum()
        e_inc_num.append(data_by_year(x))
   return e_inc_num

Затем вы можете использовать его:

emr = regions_by_year('EMR')
afr = regions_by_year('AFR')

edit:

Вы можете сократить функцию, чтобы использовать понимание списка. Это кратко, но хорошо читается:

def regions_by_year(tb_data_region_type):
    TB_data_region = TB_data[TB_data["g_whoregion"] == tb_data_region_type]

    return [TB_data_region[TB_data_region["year"]==year]["e_inc_num"].sum()
            for year in years]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...