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】:

要获取一个人工作过的独特公司的数量,请使用 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

【讨论】:

@AndreyGoloborodko \m/ 和 query 是我正在努力推广的一个非常强大的 API。如果你有兴趣了解更多,我邀请你浏览我最近写的关于queryeval的this post。

以上是关于Pandas 发现至少存在于两组中的值的主要内容,如果未能解决你的问题,请参考以下文章

用于检查 4 个不同字符组中的至少 3 个的正则表达式

nyoj 对决

pandas组中的条件赋值,由

如果 NaN 用另一列替换,Pandas 将组中的最后一项替换

如何在 HTML 表单中创建两组单选按钮以及 A 组中的更改何时会在 B 组中更改?

Pandas - 如果不存在分隔符,则使用默认值拆分列