【问题标题】:Pandas - look up key and map dictionary to a columnPandas - 查找键并将字典映射到列
【发布时间】:2023-02-21 10:30:54
【问题描述】:

我正在尝试将 .map 字典转换为 pandas DataFrame。 pandas DataFrame 中的一列是 dict 中的键。这是一个可重现的例子,

import pandas as pd

df = pd.DataFrame({
                   'id': [0, 1, 2],
                   'nm': ['pn1','pn2','pn3],
                   'v': [np.nan, 25, 0],
                   'd': [{'k1':'v1','k2':'v2','k3':'v3'}]
                 })

dtd = { 
       'pn1':{'s':100,'v':20, sv:{['sv1': 500]}},
       'pn2':{'s':150,'v':30, sv:{['sv1': 400]}}
      }

我想查看 key 并从嵌套字典中解析值 sv1 并将其分配给 pandas 系列 df.v

系列看起来像这样:

v
500
400
0
       
 

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    我对您的代码进行了一些更改以使其可执行。试试这个,看看它是否有效:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
       'id': [0, 1, 2],
       'nm': ['pn1','pn2','pn3'],
       'v': [np.nan, 25, 0],
       'd': [{'k1':'v1'},{'k2':'v2'},{'k3':'v3'}]
    })
    
    dtd = { 
       'pn1':{'s':100,'v':20, 'sv':{'sv1': 500}},
       'pn2':{'s':150,'v':30, 'sv':{'sv1': 400}}
      }
    
    df['v'] = (
        df['nm']
        .apply(lambda x: dtd[x]['sv']['sv1'] if x in dtd else np.nan)
        .combine_first(df['v'])
    )
    

    输出:

       id   nm      v             d
    0   0  pn1  500.0  {'k1': 'v1'}
    1   1  pn2  400.0  {'k2': 'v2'}
    2   2  pn3    0.0  {'k3': 'v3'}
    

    我使用“nm”列作为查找“dtd”中值的键。如果没有值,那么我将保留 v 中的现有值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 2021-08-31
      • 2021-06-26
      • 1970-01-01
      • 2020-09-01
      • 2021-12-27
      • 2010-12-31
      • 2015-07-24
      相关资源
      最近更新 更多