简体   繁体   中英

Pandas: Replace list value to a string of values from another dataframe

I did my best to try to find any answer here or google without success.

I'm trying to replace a list of IDs inside of a cell with a ", ".join of values from another Dataframe which contains the "Id" and "name" of the element.

| id   | setting | queues             |
|-------------------------------------|
| 1ade | A       | ['asdf']           |
| 2ade | B       |                    |
| 3cfg | C       | ['asdf', 'qwerty'] |
| id     | name  |
|----------------|
| asdf   | 'Foo' |
| qwerty | 'Bar' |

Result:

| id   | setting | queues             |
|-------------------------------------|
| 1ade | A       | Foo                |
| 2ade | B       |                    |
| 3cfg | C       | Foo, Bar           |

I'm losing my mind because I tried with merge , replace and lambda . For example using this:

merged["queues"] = merged["queues"].apply(lambda q: ", ".join(pd.merge(pd.DataFrame(data=list(q)), queues, right_on="id")["name"]))

Any answer will be appreciated because I am losing my mind.

First if possible some non list values repalce them to empty lists and then convert second DataFrame to dictionary and lookup in dict with filtration by if :

merged["queues"] = merged["queues"].apply(lambda x: x if isinstance(x, list) else [])

d = df2.set_index('id')['name'].to_dict()
merged["queues"] = merged["queues"].apply(lambda x: ",".join(d[y] for y in x if y in d)) 
print (merged)
     id setting   queues
0  1ade       A      Foo
1  2ade       B         
2  3cfg       C  Foo,Bar

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM