【问题标题】:How to groupby a dataframe based on list elements in a columns如何根据列中的列表元素对数据框进行分组
【发布时间】:2020-10-03 19:55:36
【问题描述】:
我有一个这样的数据框:
movie_id genres
0 2 [1,2]
1 3 [1,3]
2 4 [2,4]
我想根据流派类型制作电影组(有重复)。像这样:
genre_group movie_id genres
0 1 2 [1,2]
1 3 [1,3]
0 2 2 [1,2]
2 4 [2,4]
1 3 3 [1,3]
2 4 4 [2,4]
【问题讨论】:
标签:
python
pandas
pandas-groupby
【解决方案1】:
您可以使用explode 和map:
df1 = df.explode('genres').sort_values('genres').rename(
columns={'genres' : 'genres_group'})\
.set_index('genres_group',append=True)
df1['genres'] = df1.index.get_level_values(0).map(df['genres'])
print(df1)
movie_id genres
genres_group
0 1 2 [1, 2]
1 1 3 [1, 3]
0 2 2 [1, 2]
2 2 4 [2, 4]
1 3 3 [1, 3]
2 4 4 [2, 4]
【解决方案2】:
这是你需要达到的结果吗?
genre_group = pd.Series(df.apply(lambda x: pd.Series(x['genres']), axis=1).stack().reset_index(level=1, drop=True), name='genre_group')
df = pd.concat([genre_group, df], axis = 1)
输出: