python - Python pandas - 根据缺少的区域代码删除分组的行
问题描述
在下面的 df 中,我们有两个“混合”,如 Mix_Name 和 Mix_ID 列所示。在这些混音中的每一个中,都有多个具有唯一 Track_ID 的轨道,这些轨道包含不同的地区(请参阅“地区”列)。
Mix_Name Mix_ID Territories Track_Title Artist Track_ID
Mix Vol 1 abc123 GB | US | MX Cabala Prok & Fitch 12345678
Mix Vol 1 abc123 US | CA Autosave Fedde 9101112
Mix Vol 1 abc123 US | CA 4 Life Firebeatz 4151617
Mix Vol 1 abc123 IE | MX 4 Life Firebeatz 18192021
Mix Vol 2 xyz456 CA Warrior My Nu Leng 22232425
Mix Vol 2 xyz456 FR | DE | NE Warrior My Nu Leng 27282930
Mix Vol 2 xyz456 US | CA I'm Madonna Madonna 31323334
Mix Vol 2 xyz456 CA | US | FR Trouble Gregor Salto 35363738
我希望在这里做的是找出哪些轨道没有美国领土,如果任何轨道没有美国领土,我会想从我的数据框中删除整个组合。生成的数据框看起来像这样,因为“Mix Vol 2”在其轨道之一中缺少美国领土:
Mix_Name Mix_ID Territories Track_Title Artist Track_ID
Mix Vol 1 abc123 GB | US | MX Cabala Prok & Fitch 12345678
Mix Vol 1 abc123 US | CA Autosave Fedde 9101112
Mix Vol 1 abc123 US | CA 4 Life Firebeatz 4151617
Mix Vol 1 abc123 IE | MX 4 Life Firebeatz 18192021
我知道我需要 Groupby:'Mix_ID'、'Track_Title' 和 'Artist',但我不确定如何搜索区域列以查看它是否包含“美国”区域。任何帮助将非常感激!
解决方案
df.groupby(['Mix_Name', 'Track', 'Artist']).filter(lambda x: (x['Territories'].str.contains('US').any()))
您进行分组,然后过滤组以检查区域列是否包含“美国”。
编辑
notInUS = df.groupby(['Mix_Name','Track_Title','Artist']).filter(lambda x: ~x['Territories'].str.contains('US').any())['Mix_Name'].unique()
df[~df['Mix_Name'].isin(notInUS)]
我们可以查找在美国没有音轨的唯一 Mix_Name,然后将其从我们的主 df 中过滤掉。
推荐阅读
- sql - Active Record 发现多对多缺失
- mysql - 错误 错误:ER_BAD_FT_COLUMN:列“大小”不能是 FULLTEXT 索引的一部分
- javascript - 为什么这些筛子优化会破坏我的代码?
- python - 给定两个矩阵和一个带有两个向量的函数,如何向量化矩阵中每对向量的函数均值?
- c++ - 恢复生命周期已结束的对象的成员函数协程是UB吗?
- java - 访问扩展通用数组列表中的对象变量
- swift - 使用嵌套 UIView 动画缩放 UIView
- laravel - Laravel生成pdf时如何设置语言
- javascript - 将 React 类组件转换为具有许多回报的功能组件
- qr-code - 一个二维码可以处理多少个纯文本字符?