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



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

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

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

最新更新