Greg Greg - 10 days ago 6
Python Question

Python Pandas Groupby/Append columns

This is my example dataframe:

Index Param1 Param2
A 1 2
A 3 4
B 1 3
B 4 Nan
C 2 4


What I would like to get is:

Index Param1 Param2 Param3 Param4
A 1 2 3 4
B 1 3 4
C 2 4


What would be the best way to achieve it using pandas?
Thanks in advance for your help.

Answer

You can use groupby with unstack:

def f(x):
    return (pd.DataFrame(np.sort(x.values.ravel())))

df = df.groupby('Index')['Param1','Param2'].apply(f).unstack()
df.columns = df.columns.droplevel(0)
print (df)
       0  1     2     3
Index                  
A      1  2     3     4
B      1  3     4   Nan
C      2  4  None  None

because if use Series get:

TypeError: Series.name must be a hashable type

Another solution with cumcount:

df = df.set_index('Index').stack().reset_index(name='vals')
df['g'] = 'Param' + df.groupby('Index').cumcount().add(1).astype(str)
df = df.pivot(index='Index', columns='g', values='vals')
print (df)
g      Param1  Param2  Param3  Param4
Index                                
A         1.0     2.0     3.0     4.0
B         1.0     3.0     4.0     NaN
C         2.0     4.0     NaN     NaN
Comments