我有一个以'Break_Out_Category'
作为列的DateFrame。此列包含四个变量['Age Group', 'Race/Ethnicity', 'Gender', 'Overall']
。现在我正在尝试为这些不同的变量创建四个不同的DataFrame。
例如:
df_by_age = df[df['Break_Out_Category'] == 'AGE Group']
虽然,我不想硬编码,但我正在尝试为此编写一个循环。这是我的代码:
var_list = data_by_avg_days1['Break_Out_Category'].unique().tolist()
for var in var_list:
activity_limit_by_%var = data_by_avg_days1[data_by_avg_days1['Break_Out_Category'] == var]
print(activity_limit_by_%var['Break_Out_Category'].unique())
这是我得到的错误
Error: activity_limit_by_%var = pd.DataFrame
^
SyntaxError: can't assign to operator
这是我在这里的第一篇文章。所以,如果我没有以正确的格式发布问题。请让我知道,我能以更好的方式做些什么。
答案 0 :(得分:2)
创建“可变数量的变量”的本质是使用字典。虽然这可以作为How do I create a variable number of variables?的副本关闭,但您应该知道有更好的方法来执行此操作。
按类别划分数据框的一种简单方法是使用groupby
,迭代每个组并将其加载到数据框中。
d = {}
for i, g in data_by_avg_days1.groupby('Break_Out_Category', as_index=False):
d[i] = g
您也可以使用 dict comprehension -
执行此操作d = {i : g for i, g in data_by_avg_days1.groupby('Break_Out_Category', as_index=False)}
d
是映射的字典,它将字符串值映射到其对应的数据帧。现在,使用AGE Group
访问数据框,例如d['AGE Group']
。
这是一个包含一些示例数据的快速示例 -
df
A B
0 a 1
1 a 1
2 a 2
3 b 2
4 b 3
d = {i : g for i, g in df.groupby('A', as_index=False)}
d['a']
A B
0 a 1
1 a 1
2 a 2
d['b']
A B
3 b 2
4 b 3
请注意,如果您要重置每个组的索引,可以稍微修改一下您的理解,然后添加reset_index
来电 -
d = {i : g.reset_index() for i, g in df.groupby('A', as_index=False)}