【问题标题】:Python Pandas select group where a specific column contains zeroesPython Pandas 选择特定列包含零的组
【发布时间】:2016-05-28 11:23:01
【问题描述】:

我正在使用 Python Pandas 进行一个小项目,但遇到以下问题:

我有一个表,其中 A 列包含多个可能非唯一的值,而第二列 B 的值可能为零。现在我想按 A 列中的值对 DataFrame 中的所有行进行分组,然后只“保留”或“选择”在 B 列中包含一个或多个零的组。

例如来自如下所示的 DataFrame:

Column A    Column B
--------    --------
b           12
c           56
f           0
b           456
b           334
f           10

我只对列 A = f 的所有行(组)感兴趣:

Column A    Column B
--------    --------
f           0
f           10

我知道如何使用循环和迭代组来实现这一点,但我正在寻找一种简单且相当快速的代码,因为我使用的 DataFrame 可能会变得非常庞大。

我目前的做法是这样的:

df.groupby("A").filter(lambda x: 0 in x["B"].values)

显然我是 Python Pandas 的新手,希望能得到您的帮助!

提前谢谢你!

【问题讨论】:

  • 如何使用query, df.query("columnA == 'f'").query("columnB >= 0")
  • @titipat 谢谢你的回复。在您的解决方案中,我之前必须知道 A 列中的所有可能值,并以某种方式使用循环对其进行迭代,对吗?
  • 是的,没错。如果您想遍历,groupby 可能比我的解决方案更好。

标签: python pandas


【解决方案1】:

一种方法是获取 A 列中 B 列为零的所有值,然后在此过滤集上进行分组。

groups = df[df['Column B'] == 0]['Column A'].unique()
>>> df[df['Column A'].isin(groups)]
  Column A  Column B
2        f         0
5        f        10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2020-11-15
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多