子集pandas groupby索引

时间:2014-07-18 17:43:11

标签: python pandas

我有一个名为ndf_2 Pandas

的多索引数据框
                 ip_collection_2 ip_offset_2
user_nm   month             
100118231   2   set([142.136])  set([])                         
100118231   3   set([142.136])  set([142.136])           
100118231   6   set([108.0])    set([142.136])              
100118231   7   set([108.0])    set([108.0])               
100118231   8   set([142.136])  set([108.0])               

对于1-6和6-12个月,我想找到ip_collection_2ip_offset_2的联合。我做的第一件事是创建一个groupby对象:

groupwork=ndf_2.groupby(level=[0,1])

现在我如何按月索引进行子集化?

我知道这是在某个地方的文档中,但有一些我显然没有得到的东西,因为我在那里花了45分钟,现在我就这样了。一个简单的演示/感知调整将非常受欢迎。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你想按箱子分组

df = df.reset_index(level=1)
groups = df.groupby(df.month.replace(range(1,13),["1-6"]*6+["7-12"]*6))

上面有点丑陋,但在语义上它用1-6替换1-6值,用7-12值替换1-6。然后按那些箱子分组。

getUnions = lambda df: df[df['ip_collection_2'].isin(df['ip_offset_2'])]['ip_collection_2'].values
unions = groups.apply(getUnions)

接下来,您只需应用一个lambda函数来查找列之间的并集。难以找到一个快速的联合方法,但这是有效的

print unions

<强>输出

month
1-6      [set([142.136]), set([142.136])]
7-12                       [set([108.0])]
dtype: object