python - 根据熊猫中的条件分组和过滤
问题描述
如果满足一列的条件,我想删除整个组,(不要注意列 X1 和 X2):
Subject Visit X1 X2
A aaa 1647143 1672244
A creamy 1672244 1689707
A bbb 1689707 1713090
B yyy 1735352 1760283
B ice cream 1760283 1788062
C foo 1788062 1789885
C doo 1789885 1790728
例如,如果“访问”包含字符串“奶油”,所有主题 A 和主题 B 记录将被删除,结果将是:
Subject Visit X1 X2
C foo 1788062 1789885
C doo 1789885 1790728
我试过了:它并没有删除整个组记录
df.groupby(by=['Subject']).apply(lambda d: d[~d['Visit'].str.contains('cream',flags=re.I, regex=True)])
解决方案
您可以通过首先创建检查是否存在的列进行cream
过滤,然后使用 过滤transform
,但在布尔值的总和上进行过滤:
(df
.assign(cream = df.Visit.str.contains("cream"))
.loc[lambda df: df.groupby("Subject")
.cream
.transform("sum")==0,
df.columns]
)
Out[14]:
Subject Visit X1 X2
5 C foo 1788062 1789885
6 C doo 1789885 1790728
推荐阅读
- python - 如何与两个 matplotlib.axes.Axes 一起交互
- javascript - 将集合映射到 upsert 到数据库中。如何批量更新插入?
- ios - 包含应用剪辑的 Xcode 项目的导出存档错误
- php - 如何在 Laravel 中访问包含对象的数组
- powershell - 使用 PowerShell 在 Windows Server 2016 中获取为特定用户运行的进程
- file - 如何在机器人框架中逐行将数据附加到文件
- python - sklearn/PCA - 尝试转换高维数据时出错
- javascript - 如何使用 JSDoc 记录 useState 挂钩?
- python-3.x - 如何在不同的情况下用不同的方法编写 Python 类?
- azure - azure blob 存储生命周期是计算时间还是仅计算日期?