Pandas Groupby 选择一列中具有多个唯一值的组

3 python dataframe pandas pandas-groupby

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

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]})
Run Code Online (Sandbox Code Playgroud)

数据框

艺术家 A 有 2 张专辑(201 和 451),其中一张有 2 首曲目(1022 和 3472),另一张有 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))
Run Code Online (Sandbox Code Playgroud)

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

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

小智 6

您只想按以下方式分组ArtistId,而不是AlbumId:

groupedArtists = data.groupby(['Artist']).filter(lambda x: x['AlbumId'].nunique() > 1)
Run Code Online (Sandbox Code Playgroud)

输出:

>>> 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
...
Run Code Online (Sandbox Code Playgroud)