简体   繁体   中英

How to use for loop along with if inside lambda python?

I have a dataframe df that has a column tags . Each element of the column tags is a list of dictionary and looks like this:

[
    {
        "id": "leena123",
        "name": "LeenaShaw",
        "slug": null,
        "type": "UserTag",
        "endIndex": 0,
        "startIndex": 0
    },
    {
        "id": "1234",
        "name": "abc ltd.",
        "slug": "5678",
        "type": "StockTag",
        "endIndex": 0,
        "startIndex": 0
    }
]

The list can have any number of elements.

Sample dataset:

 0  some_data  [{'id': 'leena123', 'name': 'leenaShaw', 'slug': None, 'type...
 1  some data  [{'id': '6', 'name': 'new', 'slug': None, 'type...

I want to create a list of all the id s from the tags column where the type is UserTag

sample output: ['leena123', 'saily639,...]

I am trying with this: list(df['tags'].apply(lambda x: d['name'] if any(d['type'] == 'UserTag' for d in x)))

but it doesn't work. Kindly help pn this.

UseList Comprehension with df.apply :

df['id'] = df.tags.apply(lambda x: [i['id'] for i in x if i.get('type') == 'UserTag'])

Create a list from id column:

import itertools

l = df['id'].values.tolist()
output_id_list = list(itertools.chain(*l))

If you want to drop id column from df , do:

df.drop('id', inplace=True)

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