我有一个这样的多索引数据框:
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,所以我不能仅按索引对其进行切片。我正在尝试找到解决此类问题的一般解决方案。
答案 0 :(得分:3)
要获取一个人所从事的独特公司的数量,请使用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