список столбцов словаря в кадре данных - PullRequest
0 голосов
/ 17 октября 2019

Столбец в моем фрейме данных - это список словарей, примерно такой:

Как я могу отфильтровать строки, имеющие конкретное значение для ключа id в столбце тега? например строки, которые содержат {"id": 18}

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Поскольку ваш столбец tag является списочным, вы можете использовать explode, если находитесь на пандах 0.25 +:

# toy data
df = pd.DataFrame({'type':['df','fg','ff'],
                   'tag': [[{"id" : 12} ,{"id" : 13}], 
                           [{"id" : 12}],
                           [{'id':10}]]
                  })

# make each row contains exactly one dict: {id: val}
s = df['tag'].explode()

# the indexes of interested rows
idx = s.index[pd.DataFrame(s.to_list())['id'].values==12]

# output
df.loc[idx]

Вывод:

    type    tag
0   df      [{'id': 12}, {'id': 13}]
1   fg      [{'id': 12}]
0 голосов
/ 17 октября 2019

Пример DatFrame

df=pd.DataFrame({'type':['dg','fg','ff'],'tag':[[{"id" : 12} ,{"id" : 13}] ,[{"id" : 12}],[{"id" : 29}]]})
print(df)

  type                       tag
0   dg  [{'id': 12}, {'id': 13}]
1   fg              [{'id': 12}]
2   ff              [{'id': 29}]

Затем вы можете использовать Series.apply для проверки каждой ячейки:

df_filtered=df[df['tag'].apply(lambda x: pd.Series([dict['id'] for dict in x]).eq(12).any())]
print(df_filtered)

  type                       tag
0   dg  [{'id': 12}, {'id': 13}]
1   fg              [{'id': 12}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...