我在熊猫中有一张桌子,其中每一行都是具有属性的对象。每个对象看起来像
{'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)
答案 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'])