With Pandas I'm trying to rename unnamed columns in dataframe with values on the first ligne of data.
My dataframe:
id store unnamed: 1 unnamed: 2 windows unnamed: 3 unnamed: 4
0 B1 B2 B3 B1 B2 B3
1 2 c 12 15 15 14
2 4 d 35 14 14 87
My wanted result:
id store_B1 store_B2 store_B3 windows_B1 windows_B2 windows_B3
0 B1 B2 B3 B1 B2 B3
1 2 c 12 15 15 14
2 4 d 35 14 14 87
I don't know how I can match the column name with the value in my data. Thanks for your help. Regards
CodePudding user response:
You can use df.columns.where
to make unnamed:
columns NaN, then convert it to a Series and use ffill
:
df.columns = pd.Series(df.columns.where(~df.columns.str.startswith('unnamed:'))).ffill() np.where(~df.columns.isin(['id','col2']), ('_' df.iloc[0].astype(str)).tolist(), '')
Output:
>>> df
id store_B1 store_B2 store_B3 windows_B1 windows_B2 windows_B3
0 0 B1 B2 B3 B1 B2 B3
1 1 2 c 12 15 15 14
2 2 4 d 35 14 14 87