Home > database >  How to return a dictionary key if its values exist in a dataframe
How to return a dictionary key if its values exist in a dataframe

Time:08-06

How do I return the dictionary key if the value in a pandas DataFrame column is in the dictionary's value?

So for the df below how would you add a column col3 that returns the dictionary key i.e. odd or even based on whether col1 is in the dictionary's values?

df = pd.DataFrame({"col1": [1,2,3,4,5], "col2": [6,7,8,9,10]})
d = {"odd": [1,3,5,7,9], "even": [2,4,6,8,10]}
df["col3"] = np.where(df["col1"].isin(d.values), d.key, "") # ???

I know you can use % or something to determine whether a value is odd or even, the above is just an example, other dictionaries might be some type of config file or json that we need to read.

Want to be able to produce something like this:

   col1  col2  col3
0     1     6   odd
1     2     7  even
2     3     8   odd
3     4     9  even
4     5    10   odd

CodePudding user response:

You can try

df['col3'] = df['col1'].mod(2).map({0: 'even', 1: 'odd'})
# or
d = {v:k for k, lst in d.items() for v in lst}
df['col3'] = df['col1'].map(d)
print(df)

   col1  col2  col3
0     1     6   odd
1     2     7  even
2     3     8   odd
3     4     9  even
4     5    10   odd

CodePudding user response:

import pandas as pd
df = pd.DataFrame({"col1": [1,2,3,4,5], "col2": [6,7,8,9,10]})
d = {"odd": [1,3,5,7,9], "even": [2,4,6,8,10]}
data = pd.DataFrame(d).stack().reset_index()[["level_1", 0]].to_dict()['level_1']
df.col1.map(data)

CodePudding user response:

You could try something like this:

for key in d:
   df.loc[df.col1.isin(d[key]), 'col3'] = key

print(df)

Output:

   col1  col2  col3
0     1     6   odd
1     2     7  even
2     3     8   odd
3     4     9  even
4     5    10   odd
  • Related