我有一个大型数据集,列出了全国不同地区的竞争产品。我希望通过使用这些新数据帧名称中的列值的迭代过程将该数据帧拆分为基于该区域的其他几个数据帧,以便我可以单独使用它们 - 例如按价格对每个地区的信息进行排序,以了解每个地区的市场情况。我已经给出了以下数据的简化版本:
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
我可以使用以下内容创建区域列表:
region_list=df['Region'].unique().tolist()
我希望在一个产生大量数据帧的迭代循环中使用,例如
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很新并且还在学习,所以如果实际上有一种不同的,更明智的方法来解决这个问题,我会非常乐于接受建议。
答案 0 :(得分:28)
通过不同的值进行子集称为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