Kevin Nash
Kevin Nash

Reputation: 1561

Pandas - Filtering out column based on value

I have a Pandas Dataframe that two columns as below (view with header):

name,attribute
abc,{'attributes': {'type': 'RecordType', 'url': '/services/data/v38.0/sobjects/RecordType/000xyz'}, 'Name': 'Product 1'}
def,{'attributes': {'type': 'RecordType', 'url': '/services/data/v38.0/sobjects/RecordType/000abc'}, 'Name': 'Product 2'}
klm,{'attributes': {'type': 'RecordType', 'url': '/services/data/v38.0/sobjects/RecordType/000abc'}, 'Name': 'Product 2'}

How could I filter out rows that have attribute like 'Product 1'

Could anyone assist, thanks

Upvotes: 1

Views: 563

Answers (1)

jezrael
jezrael

Reputation: 863166

Use list comprehension with get for working with rows also if not exist key Name in some row for boolean mask and filter by boolean indexing:

df = df[[x.get('Name') == 'Product 1' for x in df['attribute']]]

Or:

df = df[df['attribute'].apply(lambda x: x.get('Name')) == 'Product 1']
#alternative, working if all Name exist in each row
#df = df[df['attribute'].apply(lambda x: x['Name']) == 'Product 1']

print (df)
  name                                          attribute
0  abc  {'attributes': {'type': 'RecordType', 'url': '...

EDIT:

If want also filter by nested dictionaries:

df = df[[x.get('attributes').get('type') == 'RecordType' for x in df['attribute']]]

Upvotes: 2

Related Questions