如何使用for循环按类别对行进行子集筛选



如何使用for循环对这些代码行进行子集设置我正在尝试对这些代码行进行子集设置,但我做不到,我认为可以用groupby和字典来完成,但我不能

df_belgium = df_sales[df_sales["Country"]=="Belgium"]
df_norway = df_sales[df_sales["Country"]=="Norway"]
df_portugal = df_sales[df_sales["Country"]=="portugal"]

最简单的方法是循环使用["Belgium","Norway","portugal"],但不鼓励尝试创建具有df_{country_name}等可变变量名称的对象(请参阅此处(,因此我建议创建一个字典来存储以国家名称为关键字的子集数据帧。

你可以使用dict理解:

df_sales_by_country = {country_name: df_sales[df_sales["Country"]==country_name] for country_name in ["Belgium","Norway","portugal"]}

理想情况是使用groupby并将子DataFrames存储在字典中:

d = dict(df.groupby('Country'))

然后访问例如d['Belgium']

如果您需要筛选一个子集的国家:

# use a set for efficiency
keep = {'Belgium', 'Norway', 'Portugal'}
d = {key: g for key, g in df.groupby('Country') if country in keep}

或:

keep = ['Belgium', 'Norway', 'Portugal']
d = dict(df[df['Country'].isin(keep)].groupby('Country'))

最新更新