我只想选择有跨多年观察结果的行。例如,假设
mlIndx = pd.MultiIndex.from_tuples([('x', 0,),('x',1),('z', 0), ('y', 1),('t', 0),('t', 1)])
df = pd.DataFrame(np.random.randint(0,100,(6,2)), columns = ['a','b'], index=mlIndx)
In [18]: df
Out[18]:
a b
x 0 6 1
1 63 88
z 0 69 54
y 1 27 27
t 0 98 12
1 69 31
我想要的输出是
Out[19]:
a b
x 0 6 1
1 63 88
t 0 98 12
1 69 31
我目前的解决方案是直截了当的,所以可以更容易地扩大规模的东西将是伟大的。您可以假设一个排序索引。你知道吗
df.reset_index(level=0, inplace=True)
df[df.level_0.duplicated() | df.level_0.duplicated(keep='last')]
Out[30]:
level_0 a b
0 x 6 1
1 x 63 88
0 t 98 12
1 t 69 31
使用分组依据^{}
可以将返回布尔值的函数传递给
我把大部分时间都花在速度上了。并非所有的解决方案都需要最快的解决方案。然而,既然这个问题已经提出来了。我会提供我认为应该是一个快速解决方案。我的意图是让未来的读者了解情况。你知道吗
时间测试结果
模拟详细信息
您可以使用
groupby
(在索引的第一级)+transform
来解决这个问题,然后使用布尔索引来过滤这些行:细节 输出
groupby
-从这里进行筛选很简单,只需找到大小大于1的行即可。你知道吗
只是一种新的方式
如果你想继续使用复制品
相关问题 更多 >
编程相关推荐