首页 > 解决方案 > DataFrameGroupBy 使用多索引选择子集

问题描述

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

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

dfgrouby1我按子组(每个数据帧)进行迭代,并希望从dfgrouby2.

2 个问题

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

循环工作正常,文档显示具有多索引的数据帧使用 .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 的第一个值

标签: pythonpython-3.xpandaspandas-groupbymulti-index

解决方案


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
     

推荐阅读