字典列内列表的额外值


label_dict
[{'colour': 'Red', 'value': '20'}, {'colour': 'Black', 'value': '23'}, {'colour': 'Brown ', 'value': '12'}, ]
[{'colour': 'Red', 'value': '15'}, {'colour': 'Black', 'value': '76'}, {'colour': 'Brown ', 'value': '45'}, ]
[{'colour': 'Black', 'value': '54'}, {'colour': 'Brown ', 'value': '56'}, ]
[{'colour': 'Brown ', 'value': '63'}, ]
.
.
.
[]
[{'colour': 'Red', 'value': '45'}, {'colour': 'Black', 'value': '48'}, {'colour': 'Brown ', 'value': '1'}, 

如果字典中存在Red,我想将值提取为列名df[Red]

df['Red'] = df['label_dict'].apply(lambda x: next((y.get('value', '') for y in x if y.get('colour') == 'Red'), ''))
df['Red'] = df['label_dict'].apply(lambda x: x.get('Red') if x else None)

这两种方法都给我一个错误

熊猫进场

展开标签列,然后提取对应于红色的值,然后按索引分组数据框,并选择每组的第一个值:

s = df['label_dict'].explode()
df['Red'] = s.str['value'].mask(s.str['colour'].ne('Red')).groupby(level=0).first()

结果:

>>> df['Red']                                                                                                
0      20
1      15
2    None
3    None
Name: Red, dtype: object

最新更新