python - 如何在 Pandas 中过滤 Groupby 标准?

标签 python pandas pandas-groupby

假设以下人为设置:

import pandas as pd
d = {'fname': ['bob', 'Bob', 'larry', 'LARRY', 'Larry', 'Dick'], 
     'lname': ['harris', 'Larson', 'Douglas', 'REDMOND', 'Beal', 'Dyke']}
df = pd.DataFrame(d)
g = df.groupby(df.fname.str.lower())

query = ['bob', 'dick', 'chris']

用简单的英语来说,我想为查询中的名字的条目创建整个数据框的 View ,忽略大小写更改。 我(认为我)想在 g 上执行高效且惯用的 filter() 操作,以查找并组合与 query 中的条目对应的那些组,进入单个 DataFrame,即:

   fname    lname
0    bob   harris
1    Bob   Larson
5   Dick     Dyke

但是,filter() 似乎会迭代整个组集(当 df 很大而 query 很小时很重要),无论如何,我似乎无法从 filter() 中访问组名称。

我能想到的最好的:

pd.concat([pd.DataFrame()] + map(lambda y: g.get_group(y), 
                                 filter(lambda x: x in g.groups, query)))

但我怀疑这效率不高或不符合习惯。

更新:

我应该澄清一下,在支持这一点的现实世界问题中,只有一个非常大的 df,但有几个独立的小型查询实例。 isin 可能仅适用于一个查询,但我发现使用一次 Groupby 可以显着提高速度,然后对每个查询进行单独查找,如使用上面的 map /过滤器组合。

最佳答案

我不知道我是否在这里遗漏了一些东西,但使用 isin 的简单 bool 索引看起来就足够了。

df[df.fname.str.lower().isin(query)]

    fname   lname
0   bob     harris
1   Bob     Larson
5   Dick    Dyke

关于python - 如何在 Pandas 中过滤 Groupby 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46899186/

相关文章:

python - 高效地序列化/反序列化 SparseDataFrame

python-3.x - 在 Pandas 数据透视表中显示映射标签而不是代码

python - 用 pandas 数据框中的平均值替换大小 > 1 的组

python - Pandas : Groupby external Trigger (timeseries)

python - Pandas groupby value_count 按频率过滤

python - Homebrew brew doctor 警告关于/Library/Frameworks/Python.framework,即使安装了 brew 的 Python

python - 如何从字典有效构建数据框(pandas)

Python GEKKO ODE 意外结果

python - 如果列中存在匹配值,则使用另一个数据帧注释一个数据帧

pandas - 比较 Pandas 数据框并添加列