代码之家  ›  专栏  ›  技术社区  ›  brienna

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

  •  0
  • brienna  · 技术社区  · 4 年前

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

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

    价值 特普斯 属性应该来自另一个字典 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 回复  |  直到 4 年前
        1
  •  0
  •   furas    4 年前

    = 在里面 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'])