pandas - add new column to dataframe from dictionary

PythonPandas

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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

Solution 2 - Python

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.

Solution 3 - Python

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFabio LamannaView Question on Stackoverflow
Solution 1 - PythonEdChumView Answer on Stackoverflow
Solution 2 - PythonSawantView Answer on Stackoverflow
Solution 3 - PythonYuan TaoView Answer on Stackoverflow