熊猫发现至少存在两组的价值

时间:2018-12-16 16:26:37

标签: 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  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

我如何分割该df,以仅查看为不同公司工作的驱动程序?所以结果应该是这样的:

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

UPD:我的原始数据帧长400k,所以我不能仅按索引对其进行切片。我正在尝试找到解决此类问题的一般解决方案。

1 个答案:

答案 0 :(得分:3)

要获取一个人所从事的独特公司的数量,请使用groupbyunique

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