有没有更有效的方法来实现这一点?

2024-05-14 17:16:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: ofinfordatabyyeartbnum
1条回答
网友
1楼 · 发布于 2024-05-14 17:16:36

确定什么是相同的,什么是不同的。创建一个相同的函数。用差异参数化它

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]

相关问题 更多 >

    热门问题