Pandas 发现至少存在于两组中的值
Posted
技术标签:
【中文标题】Pandas 发现至少存在于两组中的值【英文标题】:Pandas find values present in at least two groups 【发布时间】:2019-05-17 03:59:07 【问题描述】:我有一个这样的多索引数据框:
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】:要获取一个人工作过的独特公司的数量,请使用 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
的this post。以上是关于Pandas 发现至少存在于两组中的值的主要内容,如果未能解决你的问题,请参考以下文章
如果 NaN 用另一列替换,Pandas 将组中的最后一项替换