【问题标题】:Is there a more efficient way to accomplish this?有没有更有效的方法来实现这一点?
【发布时间】:2020-05-08 06:46:14
【问题描述】:
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”列中的所有类别重复此代码。有没有一种创建函数来完成这项任务的好方法,而不是重新输入代码并简单地替换为不同的类别名称,如下所示:

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))

理想情况下,我希望有一个数据框,其中包含“g_whoregion”中每个区域的“year”总“e_inc_num”(事件案例),如果这有意义的话,但我不知道如何来实现这一点。我的最终目标是创建一个线图,显示每个不同地区在给定年份的发病率。

【问题讨论】:

  • 识别什么是相同的,什么是不同的。创建一个功能相同的东西。用差异参数化它。

标签: python function


【解决方案1】:

辨别什么是相同的,什么是不同的。创建一个功能相同的东西。用差异参数化它。

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')

编辑:

您可以缩短函数以使用列表推导式。它简洁但可读性强:

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]

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2011-10-23
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    相关资源
    最近更新 更多