Как фильтровать строки по значению словаря?
Есть таблица из файла CSV, в которой один из столбцов - словарь. В каждой строке у словаря может быть свой набор ключей.
Пример:
df = pd.DataFrame({'id': ['a','b','c','d','e'],
'dict':[{'05': '123', '21': 'w', '14': 'z'},{'05': 'ft6v', '14': 'z'},{'05': 'gtr', '09': 'r', '14': 'n'}
,{'05': 'e434q', '21': 'r', '18': 'z'},{'08': '143hk4qyt', '21': 'r', '18': 'z'}]})
Необходимо создать отдельный столбец, в котором будет для каждой строки значение по ключу '05' из словаря по этой строке (при отсутствии - ноль). И затем выбрать только строки, в которых значение ключа '05' состоит из трех символов.
В идеале должна получиться таблица:
df2 = pd.DataFrame({'id': ['a','b','c','d','e'],
'dict':[{'05': '123', '21': 'w', '14': 'z'},{'05': 'ft6v', '14': 'z'},{'05': 'gtr', '09': 'r', '14': 'n'}
,{'05': 'e434q', '21': 'r', '18': 'z'},{'08': '143hk4qyt', '21': 'r', '18': 'z'}],
'is_05':['123','ft6v','gtr','e434q','0'],
'is_05_3':['1','0','1','0','0']})
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
df["is_05"] = df["dict"].map(lambda x: x.get("05", "0"))
df["is_05_3"] = df["is_05"].str.len().eq(3).astype("int8")
результат:
In [8]: df
Out[8]:
id dict is_05 is_05_3
0 a {'05': '123', '21': 'w', '14': 'z'} 123 1
1 b {'05': 'ft6v', '14': 'z'} ft6v 0
2 c {'05': 'gtr', '09': 'r', '14': 'n'} gtr 1
3 d {'05': 'e434q', '21': 'r', '18': 'z'} e434q 0
4 e {'08': '143hk4qyt', '21': 'r', '18': 'z'} 0 0