I have a sample table like this:
Dataframe: df
Col1 Col2 Col3 Col4
A 1 10 i
A 1 11 k
A 1 12 a
A 2 10 w
A 2 11 e
B 1 15 s
B 1 16 d
B 2 21 w
B 2 25 e
B 2 36 q
C 1 23 a
C 1 24 b
我正在尝试获取所有记录/行的组(Col1,Col2),该组具有较少数量的记录,并跳过仅具有1个记录的组(在此示例中,Col1 ='C')。因此,输出如下:
A 2 10 w
A 2 11 e
B 1 15 s
B 1 16 d
由于(A,2)组仅有2条记录,而(A,1)组有3条记录,因此需要进行翻译。
我试图从不同角度来解决这个问题,但似乎无法得到所需的结果。我能够使用groupby、filter和agg的组合找到我需要的组,但如何将其作为df的选择过滤器使用呢?经过很长时间的研究,我甚至不确定这种方法是否正确,因为它看起来过于复杂。我相信有一个优雅的解决方案,但我只是看不到它。
我尝试通过以下方式获取我想要显示行的分组:
groups = df.groupby(["Col1, Col2"])["Col2"].agg({'no':'count'})
filteredGroups = groups.groupby(level=0).filter(lambda group: group.size > 1)
print filteredGroups.groupby(level=0).agg('idxmin')
第二行是为了考虑那些可能只有一个记录的组,因为我不想将它们考虑在内。说实话,我尝试了很多变化和方法,最终也没有得到我想要的结果。我看到所有的答案都不是一行代码,至少我不觉得自己想得太多了。