【问题标题】: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)
    

    输出:

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 2020-08-05
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多