python-3.x - 在 pandas 中使用 groupby 使用计数和列值过滤数据框
问题描述
我正在尝试清理我的数据框,并且正在尝试使用 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
数据帧应转换为以下内容:
+-----+------------+
| ID | event_type |
+-----+------------+
| xyz | a |
| xyz | b |
| rst | a |
+-----+------------+
解决方案
您可以在一个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)
推荐阅读
- c# - 为什么在通用上下文中不能将继承的接口转换为其基本接口?
- c# - 从 C++ DLL 调用时,带有参数的 C# 委托回调导致 AccessViolation
- c# - C# 激活类
,带有主体,动态地,基于“类型”变量 - python - 在计算算术表达式时如何使用括号?
- reactjs - 对象的过滤器数组
- unity3d - 如何使线条渲染平放在地形上 - Unity 2018.3.1
- apex - 数据加载限制 oracle apex 5
- javascript - 为什么这个 html 段不能识别我的 javascript 函数
- javascript - SortableJS 从嵌套列表中获取顺序
- python - Python从pyinstaller创建.exe返回错误