我正在尝试清理数据框,并且正在尝试使用groupby函数。我有ID
和event_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 |
+-----+------------+
答案 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)