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')
Original: https://blog.csdn.net/kelanj/article/details/124117687
Author: 还是小小白
Title: python/pandas中一行转多行(列值分割)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/751620/
转载文章受原作者版权保护。转载请注明原作者出处!