循环执行此操作的最佳做法是什么?
我想过滤并动态创建新的DF
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')]
每个代码的AS
答案 0 :(得分:1)
列表理解是比循环和动态创建全局变量更多的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')]
答案 1 :(得分:1)
不要。只是不要。当您准备好动态创建新变量时,请避免:难以获取且难以维护。只需使用字典或列表之类的容器即可。
在大熊猫中获取该信息的常用方法是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
然后您可以获取dfs[(2021, 'AUS')]
的AUS和2021数据框