通过在不同的caegories上拆分原始DF来创建Pandas DataFrame

时间:2018-01-08 18:47:17

标签: python pandas

我有一个以'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

这是我在这里的第一篇文章。所以,如果我没有以正确的格式发布问题。请让我知道,我能以更好的方式做些什么。

1 个答案:

答案 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)}