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 使用多索引选择子集的主要内容,如果未能解决你的问题,请参考以下文章