通过与一组项目进行比较来对数据帧进行GroupBy

时间:2018-05-24 19:59:15

标签: python-3.x pandas group-by

所以我有一个大约10K行的电影数据帧。有一个列以逗号分隔的字符串捕获其类型。由于电影可以分为多种类型,我需要创建一组包含10K行中所有可能类型的类型。所以我按照以下方式去做:

simplist = []
for i in df.genres.values:
    vlist = i.split(', ')
    for item in vlist:
        simplist.append(item)
gset = set(simplist)

这让我得到了一个24种类型的清单,它来自简化中的27K项目,非常棒。但接下来就是捏:

  1. 我想通过将类型与集合进行比较来组合类型,然后进行聚合和其他操作和

  2. 我希望输出为24个不同的组,这样如果一部电影在集合中有多个类型 - 它应该出现在两个组中(在数据收集阶段删除排序或标记偏差)

  3. 群体甚至是正确的方式来解决这个问题吗?

    提前感谢您的意见/选择/方法。

2 个答案:

答案 0 :(得分:0)

好的,所以我取得了一些进展,但仍然无法把拼图拼凑起来。

首先制作一个列表并设置(不知道我将最终使用哪个)唯一值:

simplist = []

for i in df.genres.values: vlist = i.split(', ') for item in vlist: simplist.append(item)

gset = set(simplist) g_list = list(gset)

然后,单独使用df.pivot来构建分析:

table7 = df.pivot_table(index=['release_year'], values=['runtime'],aggfunc={'runtime': [np.median, ], 'popularity': [np.mean]}, fill_value=0, dropna=True)

但事情就是这样:

如果我可以按g_list索引或检查'genres'对24个不同项目的gset,那将是很棒的,但df.pivot_table不支持。将它留在Genres创建了大约2000行并且没有意义。

答案 1 :(得分:0)

得到了!!想要感谢一群帮助我朝着正确方向前进的离线人员和Pythonistas。事实证明,当一个Pandas命令(确切地说是3个)完成这个伎俩时,我已经用套装和列表旋转我的轮子!

df2 = pd.DataFrame(df.genres.str.split(', ').tolist(), index=[df.col1, df.col2, df.coln]).stack() df2 = df2.reset_index()[[0, 'col1', 'col2', 'coln',]] df2.columns = ['Genre', 'col1', "col2", 'coln']

这应创建第二个数据框(df2),其中包含用于从原始数据框分析的关键列以及复制/归因于每个类型的行。当你转身并做类似的事情时,你会看到这个的真正价值:

revenue_table = df2.pivot_table(index=['Release Year','Genre'], values=['Profit'],aggfunc={'Profit': np.sum},fill_value=0,dropna=True)或类似效果或用例的任何内容。

关闭此内容,但希望了解有关更有效方法的任何说明。