I have a dataframe and I would like to rename the columns based on another dataframe that I plan to use as dictionary. For example, what I have as first dataframe is:
AAA BBB CCC DDD
index
1 1 2 3 4
2 5 6 7 8
and as a second dataframe that I would like to use as dictionary:
val1 val2
index
1 AAA A7
2 BBB B0
3 CCC C3
4 DDD D1
What I would like to get as result is the following:
A7 B0 C3 D1
index
1 1 2 3 4
2 5 6 7 8
Initially I thought to reshape the first dataframe to long format, then merge with the dictionary dataframe and then reshape back to wide format. However I think this is quite inefficient, so I would like to use a more efficient way (if one exists). Thank you very much four your help.
Pandas Rename Single Column If you want to rename a single column, just pass the single key-value pair in the columns dict parameter. The result will be the same if there is a non-matching mapping in the columns dictionary.
You can rename pandas DataFrame column name by index (position) using rename() method or by assigning column name to df. columns. values[index] .
df.rename has a parameter called columns
that accepts dictionaries:
df.rename(columns=dict(zip(df2["val1"], df2["val2"])))
Out:
A7 B0 C3 D1
0 1 2 3 4
1 5 6 7 8
It returns a new DataFrame. You can either use inplace=True
, or assign it back to the original DataFrame.
I think you can first create dictionary
from df2
, then create Series
from columns of df1
by to_series
which you then map
using dictionary
:
print df1
AAA BBB CCC DDD
index
1 1 2 3 4
2 5 6 7 8
print df2
val1 val2
index
1 AAA A7
2 BBB B0
3 CCC C3
4 DDD D1
d = df2.set_index('val1').to_dict()
print d['val2']
{'AAA': 'A7', 'BBB': 'B0', 'CCC': 'C3', 'DDD': 'D1'}
df1.columns = df1.columns.to_series().map(d['val2'])
print df1
A7 B0 C3 D1
index
1 1 2 3 4
2 5 6 7 8
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With