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