我有一个名为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_2
和ip_offset_2
的联合。我做的第一件事是创建一个groupby对象:
groupwork=ndf_2.groupby(level=[0,1])
现在我如何按月索引进行子集化?
我知道这是在某个地方的文档中,但有一些我显然没有得到的东西,因为我在那里花了45分钟,现在我就这样了。一个简单的演示/感知调整将非常受欢迎。
答案 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