Python 大熊猫发现至少有两组存在值

Python 大熊猫发现至少有两组存在值,python,pandas,dataframe,group-by,multi-index,Python,Pandas,Dataframe,Group By,Multi Index,我有这样一个多索引数据帧: Distance Company Driver Document_id Salt Fred 1 592.0 2 550.0 John 3 961.0 4 346.0 Bricks James

我有这样一个多索引数据帧:

                            Distance
Company Driver Document_id          
Salt    Fred   1               592.0
               2               550.0
        John   3               961.0
               4               346.0
Bricks  James  10              244.0
               20              303.0
               30              811.0
        Fred   40              449.0
        James  501             265.0
Sand    Donald 15              378.0
               800             359.0
                            Distance
Company Driver Document_id    
Salt    Fred   1               592.0
               2               550.0
Bricks  Fred   40              449.0
我如何分割df以只看到为不同公司工作的司机?所以结果应该是这样的:

                            Distance
Company Driver Document_id          
Salt    Fred   1               592.0
               2               550.0
        John   3               961.0
               4               346.0
Bricks  James  10              244.0
               20              303.0
               30              811.0
        Fred   40              449.0
        James  501             265.0
Sand    Donald 15              378.0
               800             359.0
                            Distance
Company Driver Document_id    
Salt    Fred   1               592.0
               2               550.0
Bricks  Fred   40              449.0

UPD:我的原始数据帧是400k长的,所以我不能仅仅通过索引对其进行切片。我正试图找到解决此类问题的通用解决方案。

要获得一个人为之工作过的独特公司的数量,请使用
groupby
unique

v = (df.index.get_level_values(0)
       .to_series()
       .groupby(df.index.get_level_values(1))
       .nunique())   
# Alternative involving resetting the index, may not be as efficient.
# v = df.reset_index().groupby('Driver').Company.nunique()
v

Driver
Donald    1
Fred      2
James     1
John      1
Name: Company, dtype: int64
现在,您可以运行查询:

names = v[v.gt(1)].index.tolist()
df.query("Driver in @names")

                            Distance
Company Driver Document_id          
Salt    Fred   1               592.0
               2               550.0
Bricks  Fred   40              449.0

@AndreyGoloborodko\m/和
query
是一个非常强大的API,我正在尝试推广。如果你有兴趣了解更多信息,我邀请你浏览我最近写的关于
query
eval
@coldspeed,great post,++ve为你的query doc post干杯。