如何将函数应用于熊猫中每一行的对象属性

时间:2020-02-28 02:26:03

标签: python pandas lambda apply

我在熊猫中有一张桌子,其中每一行都是具有属性的对象。每个对象看起来像

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

我想遍历每行并将另外一个名为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 :(得分:0)

您不能在=中使用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'])