所以我有一个大约10K行的电影数据帧。有一个列以逗号分隔的字符串捕获其类型。由于电影可以分为多种类型,我需要创建一组包含10K行中所有可能类型的类型。所以我按照以下方式去做:
simplist = []
for i in df.genres.values:
vlist = i.split(', ')
for item in vlist:
simplist.append(item)
gset = set(simplist)
这让我得到了一个24种类型的清单,它来自简化中的27K项目,非常棒。但接下来就是捏:
我想通过将类型与集合进行比较来组合类型,然后进行聚合和其他操作和
我希望输出为24个不同的组,这样如果一部电影在集合中有多个类型 - 它应该出现在两个组中(在数据收集阶段删除排序或标记偏差)
群体甚至是正确的方式来解决这个问题吗?
提前感谢您的意见/选择/方法。
答案 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)
或类似效果或用例的任何内容。
关闭此内容,但希望了解有关更有效方法的任何说明。