我有一个具有书籍类别的pandas df列。对于此列中的每个唯一值,我想创建一个单独的列。
我尝试过x.explode('A')
,然后尝试了x.unstack(level=-1)
。
没用
x=pd.DataFrame({'A':['action,adventure','adventure,biographies',
'biographies,action','adventure,diaries','biographies,diaries',
'diaries,adventure'],
'B':[1,1,2,3,7,5]})
action adventure biographies diaries
0 1 1 NaN NaN
1 NaN 1 1 NaN
2 2 NaN 2 NaN
3 NaN 3 NaN 3
4 NaN NaN 7 7
5 NaN 5 NaN 5
答案 0 :(得分:1)
您需要混合使用pivot
,explode
和str.split(',')
首先,str.split(',')
将生成由,
分隔的原始字符串的列表。之后,我们在该列上使用explode()
将列表形式的每个元素转换为行,从而复制索引值。最后,通过旋转,我们可以将exploded
的列的值分配为新数据框的标题。
这似乎可以解决问题:
import pandas as pd
x=pd.DataFrame({'A':['action,adventure','adventure,biographies',
'biographies,action','adventure,diaries','biographies,diaries',
'diaries,adventure'],
'B':[1,1,2,3,7,5]})
x['A'] = x['A'].str.split(',')
x = x.explode('A')
final_df = x.pivot(columns='A')
print(final_df)
输出:
B
A action adventure biographies diaries
0 1.0 1.0 NaN NaN
1 NaN 1.0 1.0 NaN
2 2.0 NaN 2.0 NaN
3 NaN 3.0 NaN 3.0
4 NaN NaN 7.0 7.0
5 NaN 5.0 NaN 5.0