首页 > 解决方案 > 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',但我不确定如何搜索区域列以查看它是否包含“美国”区域。任何帮助将非常感激!

标签: pythonpandaspandas-groupbycontains

解决方案


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 中过滤掉。


推荐阅读