首页 > 解决方案 > 在 pandas 中使用 groupby 使用计数和列值过滤数据框

问题描述

我正在尝试清理我的数据框,并且正在尝试使用 groupby 函数。我有IDevent_type作为我的专栏。我想获得一个新的数据框,如果只有一行具有唯一 ID,那么event_type必须是a. 如果没有,则删除该行。

数据如下所示:event_type可以是“a”或“b”

+-----+------------+
| ID  | event_type |
+-----+------------+
| xyz | a          |
| pqr | b          |
| xyz | b          |
| rst | a          |
+-----+------------+

输出:由于ID "pqr"只发生一次(这是计数)并且没有a(列值),因为event_type数据帧应转换为以下内容:

+-----+------------+
| ID  | event_type |
+-----+------------+
| xyz | a          |
| xyz | b          |
| rst | a          |
+-----+------------+

标签: python-3.xpandas

解决方案


您可以在一个groupby

import pandas as pd
df = pd.DataFrame({"ID":['xyz', 'pqr', 'xyz', 'rst'],
                   "event_type":['a', 'b', 'b', 'a']})

你要问的是这个

    df.groupby("ID")\
      .apply(lambda x:  not (len(x)==1 and
                             not "a" in x["event_type"].values))

你可以通过打印来检查。最后要使用这个过滤器,你只需运行

df = df.groupby("ID")\
       .filter(lambda x:  not (len(x)==1 and
                               not "a" in x["event_type"].values))\
       .reset_index(drop=True)

推荐阅读