我有一个名为DataFrame
的{{1}},如下所示:(所有值都是字符串):
df
我想将其转换为:
id type variable
---------------------------------------------
A a item_1
A a item_2
A a item_3
A b item_4
A b item_5
A b item_6
A c item_7
A c item_8
A c item_9
基本上,我希望列type a |b |c
id
------------------------------------------------------------------------------
A item_1|item_2|item_3 | item_4 | item_5 |item_6| item_7 |item_8 | item_9
和type
排列在多级列中。这显然是一个快照,但基本上我variable
id
都有9个不同的值
我尝试过以下代码:
df
但是得到以下错误:
df.pivot(index = 'id', columns = 'type', values = 'variable')
我确信有一个相当简单的解决方案,我只是没想到它!我将不胜感激任何帮助。感谢
答案 0 :(得分:2)
在此处创建一个帮助键(使用cumcount
)以删除错误Index contains duplicate
df.assign(helpkey=df.groupby('type').cumcount()).set_index(['id','type','helpkey']).variable.unstack([-2,-1])
Out[138]:
type a b c \
helpkey 0 1 2 0 1 2 0 1
id
A item_1 item_2 item_3 item_4 item_5 item_6 item_7 item_8
type
helpkey 2
id
A item_9
我们也可以使用crosstab
pd.crosstab(index=df.id,columns=[df.type,df.groupby('type').cumcount()],values=df.variable,aggfunc='sum')
Out[144]:
type a b c
col_1 0 1 2 0 1 2 0 1 2
id
A item_1 item_2 item_3 item_4 item_5 item_6 item_7 item_8 item_9
或pivot_table
:
df.assign(helpkey=df.groupby('type').cumcount()).pivot_table(index='id',columns=['type','helpkey'],values='variable', aggfunc='sum')