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

2024-10-01 13:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pandas中有一个表,其中每一行都是一个具有属性的对象。每个对象看起来像

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

我想检查每一行,在properties字典中再添加一个名为TERPS的属性,使其看起来像

{'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)

Tags: 对象nameiddf属性typepropertiesfeature
1条回答
网友
1楼 · 发布于 2024-10-01 13:25:59

不能在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'])

相关问题 更多 >