在熊猫中使用groupby来使用计数和列值过滤数据帧

时间:2019-02-12 17:49:10

标签: python-3.x pandas

我正在尝试清理数据框,并且正在尝试使用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,因此数据帧应转换为以下内容: / p>

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

1 个答案:

答案 0 :(得分:1)

您可以在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)
相关问题