在数据帧上的 pandas groupby 之后循环遍历组

Posted

技术标签:

【中文标题】在数据帧上的 pandas groupby 之后循环遍历组【英文标题】:For loop through groups after pandas groupby on a dataFrame 【发布时间】:2021-12-28 01:13:29 【问题描述】:

我有以下 pandas 数据框并创建一个 groupby 对象:

df = pd.DataFrame('Colors': ['blue', 'blue', 'orange',
                              'purple', 'orange', 'purple', 'blue'], 
                   'Price': ['500', '500', '200', '300', '765', '1100', '762', 
                              '650'],
                   'Style': ['farm', 'contemporary', 'modern', 'MDM', 
                             'contemporary', 'farm', 'contemporary'],
                   'Location': ['far', 'near', 'far', 'far', 'near', 'far', 'far', 
                                'near'])

grouped_df = df.groupby(['Colors', 'Price', 'Style', 'Location'])

Groups in grouped_df are: 

grouped_df = 

Colors   Price   Style         Location
blue     500     contemporary  near
                 farm          far
         650     contemporary  near
orange   1100    contemporary  far
         250     modern        far
purple   762     farm          far
         765     MDM           near

我可以通过以下方式迭代组:

for name, group in grouped_df:
    ..........

但是如何在所有组对上执行嵌套 for 循环以对每个唯一组对执行操作?明确地说,它有点像使用组 1 并与其他组迭代所有唯一对,移动到组 2 并做同样的事情并重复。具体来说,每个操作最终都会成为对组对的 pd.merge() 操作。这可能吗?

或者可以使用reindex by MultiIndex 或其他方式来实现吗?

【问题讨论】:

你的预期输出是什么? 【参考方案1】:

我假设无论顺序如何,您都不想重复相同的组对。在这种情况下,您可以使用itertools.combinations

import itertools as it

grouped_df = df.groupby(['Colors', 'Price', 'Style', 'Location'])

for (name1, group1), (name2, group2) in it.combinations(grouped_df, 2):
    # (...)

【讨论】:

以上是关于在数据帧上的 pandas groupby 之后循环遍历组的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数

Groupby 在一列 pandas 数据帧上,并使用 GridsearchCv 使用通用 sklearn 管道训练每个组的特征和目标 (X, y)

具有两个分类变量的数据帧上的 Groupby 和 count() [重复]

数据帧上的 spark GROUPED_MAP udf 是不是并行运行?

许多数据帧上的高效 Python Pandas 股票 Beta 计算

基于条件更改行值的 Python for 循环可以正常工作,但不会更改 pandas 数据帧上的值?