movielens中的genres列有多个值,由“|”隔开,在统计的时候需要将其分割,以便统计每个电影类型,这就涉及到python中的一行转多行了。。(不知道学名叫啥。。)
目录
1. 先看一下数据
test = [{"a":1,"b":9,"genres":"Animation|Children's|Musical"},{"a":2,"b":9,"genres":"Musical|Romance"}]
test = pd.DataFrame(test)
test
2. 仅分割genres列
test["genres"].str.split('|',expand=True).stack().reset_index(level=1,drop=True).reset_index(name='genres')
看看每一步都在干啥
(1) .str.split('|', expand=True);分割并展开,缺失的为None
(2).stack();堆叠成一列
(3).reset_index(level=1);将序列转换成dataframe,,level也能为0,看看
后面就容易理解了。
3. 若要保留一列作为index
比如:
代码:
(test.set_index("a"))["genres"].str.split('|',expand=True).stack().reset_index(level=1,drop=True).reset_index(name='genres')
4. 若要保留两列作为index
(test.set_index(["a","b"]))["genres"].str.split('|',expand=True).stack().reset_index(level=2,drop=True).reset_index(name='genres')