I would like to add a column ‘D’ to a dataframe like this:
U,L 111,en 112,en 112,es 113,es 113,ja 113,zh 114,es
based on the following Dictionary:
d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'}
so that the resulting dataframe appears as:
U,L,D 111,en,en 112,en,en 112,es,en 113,es,es 113,ja,es 113,zh,es 114,es,es
So far I tried the pd.join() method but I can’t figured out how it works with Dictionaries.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Call map and pass the dict, this will perform a lookup and return the associated value for that key:
In [248]:
d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'}
df['D'] = df['U'].map(d)
df
Out[248]:
U L D
0 111 en en
1 112 en en
2 112 es en
3 113 es es
4 113 ja es
5 113 zh es
6 114 es es
Method 2
Here is a simpler way that should work well too:
df["D"] = pd.Series(d)
Note: The dict keys need to be in the DataFrame index for this.
Method 3
I got TypeError: 'dict' object is not callable error for EdChum’s solution when I try to use index.map()… And I haven’t found a way to get index as Series.
So I found another solution to this problem by creating a Series object from the dict object first.
new_d = pd.Series(d)
And then do the pd.join with the column you like. That may help.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0