DataFrameGroupBy 使用多索引选择子集

Posted

技术标签:

【中文标题】DataFrameGroupBy 使用多索引选择子集【英文标题】:DataFrameGroupBy select subset using multiindex 【发布时间】:2021-11-01 09:30:34 【问题描述】:

2 个完全相同的结构化数据帧。我将它们按 A 列和 B 列分组。

dfgrouby1=df1.groupby(['A','B'])
dfgrouby2=df2.groupby(['A','B'])

我按子组(每个数据帧)遍历dfgrouby1,并希望从dfgrouby2 获取具有相同索引(iA,iB)的子组(数据帧)。

2 个问题

    如何在dfgrouby2中检索对应的子组; 如果 (iA,iB) 索引在 dfgrouby2 中不存在,如何捕获。

循环工作正常,文档显示具有多索引的数据帧使用 .loc[(index tuple)],但显然不是 DataFrameGroupBy 对象。

广泛搜索。可能没有使用正确的描述符。

for (iA,iB),eachgroup1 in dfgrouby1:
    eachgroup2 =dfgrouby2.loc[(iA,iB)]
    #do things with eachgroup1['C':'Q'] vs. eachgroup2['C':'Q'] 

AttributeError: 'DataFrameGroupBy' object has no attribute 'loc'

也试过了:

    eachgroup2 =dfgrouby2[[iA,iB]]
KeyError: "Columns not found: 204, 34"
OR
    eachgroup2 =dfgrouby2[(iA,iB)]
KeyError: "Columns not found: 204, 34"

注意:204, 34 是 iA,iB 的第一个值

【问题讨论】:

很难理解您在寻找什么。 DataFrameGroupBy 是一个 indexer,它只是一种在分组的受限窗口顺序中快速访问特定索引组的机制。一般来说,如果您只想对某个部分进行操作,您应该在分组之前设置子集或选择 好的 - 那么这将如何应用到上面呢?在我对 df1 进行分组之前,我不知道我在 df2 中索引了哪些组。 TIA 【参考方案1】:

get_group 是我找不到的语句。这会从第二个 groupby 中拉出相应的组。一个简单的 try/except 就足够了。

for (iA,iB),eachgroup1 in dfgrouby1:
     try:
          eachgroup2 =dfgrouby2.get_group(iA,iB)
          #comparison code for eachgroup1 and eachgroup2
     except:
          #missing statement/or exception code
     

【讨论】:

以上是关于DataFrameGroupBy 使用多索引选择子集的主要内容,如果未能解决你的问题,请参考以下文章

在 groupby 熊猫对象上应用 rolling() 时,多索引重复

panda的多索引的好处?

只选择多索引DataFrame的一个索引

熊猫使用多索引选择第二个索引的最后一行

使用句点选择/切片多索引数据帧时间序列会导致错误?

Pandas 多索引数据框 - 从多索引中的一个索引中选择最大值