如果我有这个数据框
import pandas as pd
tuples_index = [(1,1990), (2,1999), (2,2002), (3,1992), (3,1994), (3,1996)]
index = pd.MultiIndex.from_tuples(tuples_index, names=['id', 'FirstYear'])
df = pd.DataFrame([2007, 2006, 2006, 2000, 2000, 2000], index=index, columns=['LastYear'] )
df
Out[2]:
LastYear
id FirstYear
1 1990 2007
2 1999 2006
2002 2006
3 1992 2000
1994 2000
1996 2000
我想获得数据框的一个子集,其中基于id的组长于1,我可以做到这一点,但它很慢:
%timeit df.groupby(level=0).filter(lambda x: len(x) > 1)
1000 loops, best of 3: 1.36 ms per loop
我的df有数千万行和大量的组(大多数组都是len 1)所以时间加起来。我可以通过这种方式更快地获得布尔索引器:
%timeit df.groupby(level=0).size() > 1
1000 loops, best of 3: 364 µs per loop
但是布尔索引器只有id作为索引:
id
1 False
2 True
3 True
我想也许我给了更多的上下文,但是如何使用带有单个索引的布尔索引器从具有MultiIndex的数据帧中获取子集?期望的输出将是:
LastYear
id FirstYear
2 1999 2006
2002 2006
3 1992 2000
1994 2000
1996 2000