Как применить функцию к атрибуту объекта для каждой строки в pandas - PullRequest
1 голос
/ 28 февраля 2020

У меня есть таблица в pandas, где каждая строка является объектом с атрибутами. Каждый объект выглядит как

{'type': 'Feature',
 'properties': {'GEO_ID': '0400000US23',
  'STATE': '23',
  'NAME': 'Maine',
  'LSAD': '',
  'CENSUSAREA': 30842.923}}

Я хочу go над каждой строкой и добавить еще один атрибут с именем TERPS в словарь properties, чтобы он выглядел как

{'type': 'Feature',
 'properties': {'GEO_ID': '0400000US23',
  'STATE': '23',
  'NAME': 'Maine',
  'LSAD': '',
  'CENSUSAREA': 30842.923,
  'TERPS': 82}}                   <----- new attribute

Значение атрибута TERPS должно исходить из другого словаря counts, который выглядит как

California              1161
New York                 601
Florida                  588
Minnesota                533
Maryland                 463
Washington               438
Texas                    363
Pennsylvania             356
Ohio                     348

Я могу сделать это для одной строки:

df.iloc[0]['properties']['TERPS'] = counts[df.iloc[0]['properties']['NAME']]

Но как сделать это для всех строк? Это получит значение для каждой строки, но я борюсь с его назначением.

df.apply(lambda x : counts[x['properties']['NAME']], axis=1)

1 Ответ

0 голосов
/ 28 февраля 2020

Вы не можете использовать = в lambda, но вы можете сделать это в функции, которую вы можете использовать с apply().

def change(x):
    x['properties']['TERPS'] = counts[x['properties']['NAME']]

df.apply(change)

Минимальный рабочий пример

import pandas as pd

counts = {'Maine': 83}

data = {'A': [{'type': 'Feature',
  'properties': {'GEO_ID': '0400000US23',
  'STATE': '23',
  'NAME': 'Maine',
  'LSAD': '',
  'CENSUSAREA': 30842.923}}]}

df = pd.DataFrame(data)

def change(x):
    x['properties']['TERPS'] = counts[x['properties']['NAME']]

df['A'].apply(change)

print(df['A'].iloc[0]['properties'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...