Панды находят ценности, присутствующие как минимум в двух группах - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть мультииндексный фрейм данных:

                            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: мой исходный фрейм данных имеет длину 400 КБ, поэтому я не могу просто разрезать его по индексу.Я пытаюсь найти общее решение для решения подобных проблем.

1 Ответ

0 голосов
/ 16 декабря 2018

Чтобы узнать количество уникальных компаний, в которых работал человек, используйте 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
...