Pivot a dataframe with two columns as the index

2019-08-27 03:47发布

I have data in the following format:

Record ID Para Tag
1          A    x
1          A    y
2          B    x 
2          B    y
1          A    z

I want to transform the data into the following format:

Record Para x_Tag y_Tag z_Tag
1       A    1     1      1
2       B    1     1      0

Need some guidance to do so in Pandas.

2条回答
贼婆χ
2楼-- · 2019-08-27 04:39

pivot_table

pivot_table works nicely here, and should be fast:

df.pivot_table(
    index=['Record ID', 'Para'], columns='Tag', aggfunc='size', fill_value=0
).add_prefix('Tag_').reset_index()

Tag  Record ID Para  Tag_x  Tag_y  Tag_z
0            1    A      1      1      1
1            2    B      1      1      0

crosstab

pd.crosstab(
    [df['Record ID'], df['Para']], df['Tag']
).add_prefix('Tag_').reset_index()

Tag  Record ID Para  Tag_x  Tag_y  Tag_z
0            1    A      1      1      1
1            2    B      1      1      0
查看更多
欢心
3楼-- · 2019-08-27 04:40

This is get_dummies

pd.get_dummies(df.set_index(['RecordID','Para'])).sum(level=[0,1]).reset_index()
Out[132]: 
   RecordID Para  Tag_x  Tag_y  Tag_z
0         1    A      1      1      1
1         2    B      1      1      0
查看更多
登录 后发表回答