python-3.x - 从 {condition} 的 pandas 中删除组
问题描述
我有这样的数据框:
+---+--------------------------------------+-----------+
| | envelopeid | message |
+---+--------------------------------------+-----------+
| 1 | d55edb65-dc77-41d0-bb53-43cf01376a04 | CMN.00002 |
| 2 | d55edb65-dc77-41d0-bb53-43cf01376a04 | CMN.00004 |
| 3 | d55edb65-dc77-41d0-bb53-43cf01376a04 | CMN.11001 |
| 4 | 5cb72b9c-adb8-4e1c-9296-db2080cb3b6d | CMN.00002 |
| 5 | 5cb72b9c-adb8-4e1c-9296-db2080cb3b6d | CMN.00001 |
| 6 | f4260b99-6579-4607-bfae-f601cc13ff0c | CMN.00202 |
| 7 | 8f673ae3-0293-4aca-ad6b-572f138515e6 | CMN.00002 |
| 8 | fee98470-aa8f-4ec5-8bcd-1683f85727c2 | TKP.00001 |
| 9 | 88926399-3697-4e15-8d25-6cb37a1d250e | CMN.00002 |
| 10| 88926399-3697-4e15-8d25-6cb37a1d250e | CMN.00004 |
+---+--------------------------------------+-----------+
我已将其分组,grouped = df.groupby('envelopeid')
并且我需要从数据框中删除所有组,并仅保留那些仅包含消息 (CMN.00002) 或 (CMN.00002 和 CMN.00004) 的组。所需的数据框:
+---+--------------------------------------+-----------+
| | envelopeid | message |
+---+--------------------------------------+-----------+
| 7 | 8f673ae3-0293-4aca-ad6b-572f138515e6 | CMN.00002 |
| 9 | 88926399-3697-4e15-8d25-6cb37a1d250e | CMN.00002 |
| 10| 88926399-3697-4e15-8d25-6cb37a1d250e | CMN.00004 |
+---+--------------------------------------+-----------+
试过了
(grouped.message.transform(lambda x: x.eq('CMN.00001').any() or (x.eq('CMN.00002').any() and x.ne('CMN.00002' or 'CMN.00004').any()) or x.ne('CMN.00002').all()))
但它不能正常工作
解决方案
尝试:
grouped = df.loc[df['message'].isin(['CMN.00002', 'CMN.00002', 'CMN.00004'])].groupby('envelopeid')
推荐阅读
- python-3.x - scipy.optimize.minimize BFGS 中的 norm 变量有什么作用
- x86 - 具有顺序管道的 CPU 中是否存在 ROB?
- java - 如何检测 Java 中 if else 语句中的所有特殊字符?
- sql - 如何基于迭代更新Oracle中具有不同值的表
- android - 未使用 android 10 推送的通知
- plugins - 在我的世界插件中发送错误消息的代码
- windows - 即使打开“显示隐藏文件”,如何在 Windows 中隐藏文件和文件夹
- python - 从两个值的总和制作虚拟列的pythonic方法
- sql - 在 SQL 中从 UNION 接收重复的结果
- javascript - 无法在threejs中显示3D模型