使用循环动态创建DF和过滤器

2024-10-01 22:37:58 发布

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

循环这个的最佳实践是什么

我想筛选并动态创建新的DFs

df_aus19 = df_mat.loc[(df_temp['Year'] == 2020 ) & (df_mat['Country'] == 'AUS')]
df_aus20 = df_mat.loc[(df_temp['Year'] == 2020 ) & (df_mat['Country'] == 'AUS')]
df_aus21 = df_mat.loc[(df_temp['Year'] == 2021 ) & (df_mat['Country'] == 'AUS')]
df_aus22 = df_mat.loc[(df_temp['Year'] == 2022 ) & (df_mat['Country'] == 'AUS')]
df_aus23 = df_mat.loc[(df_temp['Year'] == 2023 ) & (df_mat['Country'] == 'AUS')]

按规范


Tags: 规范dfyearcountrytemploc动态创建mat
2条回答

别这样。别这样。当你发现自己已经准备好动态地创建新的变量时,只要克制一下:它很难获得,也很难维护。只需使用字典或列表之类的容器

而在大熊猫身上,通常的方法是group_by

dfs = dict()
for (year, country), sub in df.groupby(['Year', 'Country']):
  # if 2020 <= year <= 2023 and county == 'AUS':     # filter optionaly
      dfs[(year, country)] = sub

然后可以将AUS和2021的数据帧作为dfs[(2021, 'AUS')]

解决问题的一种比循环和动态创建全局变量更为python的方法是列表理解:

years = list(range(2019, 2024))
df_aus_list = [df_mat.loc[(df_temp['Year'] == i) & (df_mat['Country'] == 'AUS')] for i in years]

如果确实需要生成与代码相同的结果,可以动态创建新的全局变量,如下所示:

years = list(range(2019, 2024))
for i in years:
    globals()["df_aus"+str(i % 100)] = df_mat.loc[(df_temp['Year'] == i ) & (df_mat['Country'] == 'AUS')]

相关问题 更多 >

    热门问题