为列中的每个唯一值生成唯一列

时间:2019-10-07 21:42:42

标签: python pandas dataframe

我有一个具有书籍类别的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

1 个答案:

答案 0 :(得分:1)

您需要混合使用pivotexplodestr.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