pandas数据透视表,其中列包含一个具有多个类别的字符串



我有一个数据的形式:

'cat'     'value'
a         1
a,b       2
a,b,c     3
b,c       2
b         1

,我想用数据透视表转换:

'a'  'b'  'c'
1
2    2
3    3    3
2    2
1

如何执行此操作。如果我使用pivot命令:

df.pivot(columns= 'cat', values = 'value')

产生如下结果

'a' 'a,b' 'a,b,c' 'b,c' 'b' 
1
2
3
2
1

您可以在将字符串转换为列表后使用.explode(),然后正常枢轴:

df['cat'] = df['cat'].str.split(',')
df = df.explode('cat').pivot_table(index=df.explode('cat').index,columns='cat',values='value')

这个输出:

cat a   b   c
0   1.0 NaN NaN
1   2.0 2.0 NaN
2   3.0 3.0 3.0
3   NaN 2.0 2.0
4   NaN 1.0 NaN

您可以重置,或者重命名索引,如果您不希望它被命名为cat

Try withstr.get_dummies并乘以value列(然后在必要时将0替换为nan)

df['cat'].str.get_dummies(",").mul(df['value'],axis=0).replace(0,np.nan)

a    b    c
0  1.0  NaN  NaN
1  2.0  2.0  NaN
2  3.0  3.0  3.0
3  NaN  2.0  2.0
4  NaN  1.0  NaN

最新更新