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