Python 数据透视表,其中列包含具有多个catogeries的字符串

Python 数据透视表,其中列包含具有多个catogeries的字符串,python,pandas,pivot-table,Python,Pandas,Pivot Table,我有以下表格中的数据: '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

我有以下表格中的数据:

'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
尝试使用并将
列相乘(如有必要,将0替换为nan)


将字符串转换为列表后,您可以使用
.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

的话,您可以重置或重命名索引。我有
df=df.explode('cat')。pivot(columns='cat',values='value')
,如果它与您的pivot相同,可能会更简单一些?不,因为值会聚合并输出一行:)输出与您的相同,至少在这个例子中是这样。哦,对不起,我刚才注意到您使用的是
pivot
,而我使用的是
pivot\u table
。是的,你是对的,你也可以使用
pivot
。两个答案都不错,但我使用了这个版本。
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