2016-11-09 49 views
6

我有一个大型数据集,列出了全国不同地区出售的竞争对手产品。我期望通过使用这些新数据框名称内的列值的迭代过程,基于该区域将此数据框拆分为多个其他数据框,以便我可以分别处理每个数据框 - 例如,按价格对每个地区的信息进行分类,以了解每个市场的情况。我给出的数据下面的简化版本:Python - 根据列值将数据帧拆分为多个数据框并用这些值命名它们

region_list=df['Region'].unique().tolist() 

这一点我希望在生成一个迭代循环使用:

Competitor Region ProductA ProductB 
Comp1  A  £10  £15 
Comp1  B  £11  £16 
Comp1  C  £11  £15 
Comp2  A  £9  £16 
Comp2  B  £12  £14 
Comp2  C  £14  £17 
Comp3  A  £11  £16 
Comp3  B  £10  £15 
Comp3  C  £12  £15 

我可以使用下面的创建区域的列表一些数据帧,例如

df_A : 

Competitor Region ProductA ProductB 
Comp1  A  £10  £15 
Comp2  A  £9  £16 
Comp3  A  £11  £16 

我可以为每个区域手动执行此操作,用代码

df_A=df.loc[df['Region']==A] 

但现实情况是,这个数据集有大量的这将使该代码繁琐的地区。有没有创建一个迭代循环来复制这个的方法?有一个类似的问题,即询问有关拆分数据帧的问题,但答案并未显示如何根据每个列值标记输出。

我对Python很陌生,仍在学习,所以如果实际上有一种不同的,更明智的方法来处理这个问题,我非常乐于接受这些建议。

回答

7

子集由不同的值被称为groupby,如果只是想通过与for环基团来迭代,语法是:

for region, df_region in df.groupby('Region'): 
    print(df_region) 

    Competitor Region ProductA ProductB 
0  Comp1  A  £10  £15 
3  Comp2  A  £9  £16 
6  Comp3  A  £11  £16 
    Competitor Region ProductA ProductB 
1  Comp1  B  £11  £16 
4  Comp2  B  £12  £14 
7  Comp3  B  £10  £15 
    Competitor Region ProductA ProductB 
2  Comp1  C  £11  £15 
5  Comp2  C  £14  £17 
8  Comp3  C  £12  £15 
+5

更好'dict_of_regions = {K:v对于K,V中df.groupby( '区')}' – piRSquared

相关问题