Merge Multiple Rows Of The Same ID Into One Row While Creating New Columns In Pandas
Suppose there is a dataframe like this: I want to compress this dataframe into one ID one row format while creating new columns if there are different values in a column for the s
Solution 1:
selection part:
cols=df.filter(like='Col').columns
exclude=['Col1','Col4']
#These are the columns that you want to kept like Col1
Calculation part:
out=df.pivot_table(cols,'Something_ID','Description').swaplevel(axis=1)
includecols=~out.columns.get_level_values(1).isin(exclude)
newdf=out.loc[:,~includecols].droplevel(0,1).groupby(level=0,axis=1).first()
out=out.loc[:,includecols]
out.columns=out.columns.map('_'.join)
out=newdf.join(out).reset_index()
output of out
:
Something_ID Col1 Desc1_Col2 Desc2_Col2 Desc3_Col2 Desc4_Col2
0 id1 1.1 0.1 2.1 3.1 NaN
1 id2 8.1 1.1 2.1 NaN 5.1
Sample Dataframe used by me:
df=pd.DataFrame({'Something_ID': {0: 'id1', 1: 'id1', 2: 'id1', 3: 'id2', 4: 'id2', 5: 'id2'},
'Description': {0: 'Desc1',
1: 'Desc2',
2: 'Desc3',
3: 'Desc1',
4: 'Desc4',
5: 'Desc2'},
'Col1': {0: 1.1, 1: 1.1, 2: 1.1, 3: 8.1, 4: 8.1, 5: 8.1},
'Col2': {0: 0.1, 1: 2.1, 2: 3.1, 3: 1.1, 4: 5.1, 5: 2.1},
'Col3': {0: 0.3, 1: 6.3, 2: 9.3, 3: 3.3, 4: 15.3, 5: 6.3},
'Col4': {0: 0.6, 1: 12.6, 2: 18.6, 3: 6.6, 4: 30.6, 5: 12.6}})
Post a Comment for "Merge Multiple Rows Of The Same ID Into One Row While Creating New Columns In Pandas"