Home > Enterprise >  pandas groupby to new columns
pandas groupby to new columns

Time:07-07

I have the following table

Group Value Name
1 1.1 AAAA
1 1.2 BBBB
2 1.4 CCCC
2 1.6 DDDD
3 0.4 EEEE
3 0.3 FFFF

I'd like to transform the table to the following by grouping by the group ID:

Group Value_1 Name_1 Value_2 Name_2
1 1.1 AAAA 1.2 BBBB
2 1.4 CCCC 1.6 DDDDD
3 0.4 EEEE 0.3 FFFF

For now a solution, assuming there are only two rows per group is fine, but if possible I'd like to see a solution with more than two rows.

CodePudding user response:

Adding a counter for each group and then unstack:

df_wide = (df.assign(count=(df.groupby("Group").cumcount()   1).astype(str))
             .set_index(["Group", "count"])
             .unstack("count")
             .sort_index(axis=1, level=1))
df_wide.columns = df_wide.columns.map('{0[0]}_{0[1]}'.format)

df_wide

      Name_1  Value_1 Name_2  Value_2
Group                                
1       AAAA      1.1   BBBB      1.2
2       CCCC      1.4   DDDD      1.6
3       EEEE      0.4   FFFF      0.3
  • Related