【问题标题】:Pandas Groupby Select Groups that Have More Than One Unique Values in a ColumnPandas Groupby 选择列中具有多个唯一值的组
【发布时间】:2023-03-30 03:31:01
【问题描述】:

我有一个包含一些艺术家、他们的专辑和他们的曲目的一些信息的数据框。

df = pd.DataFrame({'Artist': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C', 'D', 'E'], 'AlbumId': [201, 201, 451, 390, 390, 272, 272, 698, 698, 235, 312], 'TrackId': [1022, 3472, 9866, 6078, 2634, 3411, 8673, 2543, 5837, 9874, 1089]})

艺术家 A 有 2 张专辑(201 和 451),其中一张有 2 首曲目(1022 和 3472),1 张专辑有 1 首曲目(9866)。

艺术家 B 有 1 张专辑 (390) 和 2 首曲目(6078 和 2634)。

艺术家 C 有 2 张专辑(272 和 698),每张专辑有 2 首曲目。

艺术家 D 有 1 张专辑 (235) 和 1 首曲目 (9874)。

艺术家 E 有 1 张专辑 (312) 和 1 首曲目 (1089)。

我想找到拥有超过 1 张专辑的艺术家,并相应地获取这些艺术家的行。我想要的输出如下所示:

我试过了:

groupedArtists = data.groupby(['ArtistId', 'AlbumId']).filter(lambda group: (group.AlbumId.nunique() > 1))

但它似乎没有按预期工作。

有人可以帮我吗?我很感激!

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您以可以直接复制和粘贴到程序中的方式提供数据,例如df.head().to_dict('list'),将更容易为您提供帮助。 This guide 有很多关于获得 Pandas 问题答案的好建议。

标签: python pandas dataframe pandas-groupby


【解决方案1】:

您只想按ArtistId 分组,而不是AlbumId

groupedArtists = data.groupby(['Artist']).filter(lambda x: x['AlbumId'].nunique() > 1)

输出:

>>> groupedArtists
  Artist  AlbumId  TrackId
0      A      201     1022
1      A      201     3472
2      A      451     9866
5      C      375     1022
6      C      412     9866
7      C      375     3472
...

【讨论】:

    【解决方案2】:

    分组应该由艺术家单独进行。

    然后,对于每个组,检查它包含多少(不同)专辑 并且只选择拥有超过 1 张专辑的群组。

    所以正确的解决方案是:

    data.groupby('Artist').filter(lambda grp: grp.AlbumId.nunique() > 1)
    

    【讨论】:

      【解决方案3】:

      这是我找到的解决方案,有点冗长,但也许更容易理解:

      counted = df.groupby(['Artist']).size().reset_index(name='counts')
      df[df['Artist'].isin(counted[counted.counts > 1].Artist)]
      

      【讨论】:

        【解决方案4】:

        您可以根据专辑数量创建聚合 DataFrame,然后根据您想要的专辑数量进行过滤

        stats = df.groupby(['Artist'])['AlbumId'].count().reset_index()
        morethan1 = stats.loc[stats['AlbumId'] >1]
        

        【讨论】:

          猜你喜欢
          • 2023-03-31
          • 2016-08-12
          • 1970-01-01
          • 2018-08-20
          • 2019-11-06
          • 2021-10-12
          • 2015-10-10
          • 2013-10-14
          • 2019-06-25
          相关资源
          最近更新 更多