【问题标题】:Replacing the values inside the value of a dictionary替换字典值中的值
【发布时间】:2021-08-31 04:09:00
【问题描述】:

1.我有一个数据框输入:

emp data
pp  ab
qq  bc
rr  cs
ss  dp

字典:

df_r.to_dict('dict')

2.我有另一个名称具有字符串值的数据框:

ID name
1  ['u']['s']
2  ['v']['ab']
3  ['w']['dp']
4  ['x']['t']

字典:

df.to_dict('dict')

预期结果:我想根据数据的emp值替换name的值

ID name
1  ['u']['s']
2  ['v']['pp']
3  ['w']['ss']
4  ['x']['t']

代码:我试过了

mapper = dict(df_r[["data", "emp"]].values)
mapper
df.name = df.name.replace(mapper).values
df

问题: 没有对值进行任何替换。数据框不受影响。

【问题讨论】:

    标签: python dataframe dictionary nested


    【解决方案1】:

    将第一个 Dataframe 转换为dict,然后用它来更新第二个 Dataframe。步骤:

    数据框:

    import pandas as pd
    
    df1 = pd.DataFrame([['pp', 'ab'], 
                        ['qq','bc'],
                        ['rr', 'cs'],
                        ['ss', 'dp']],
                       columns=['emp', 'data'])
    
    df2 = pd.DataFrame([['u', 's'],
                       ['v', 'ab'],
                       ['w', 'dp'],
                       ['x', 't']],
                       columns=['ID', 'name'])
    

    从 df1 获取字典,其中 datakeysempvalues

    将数据作为Dataframe中的索引,然后转换为dict

    df1_dict = df1.set_index('data').to_dict()['emp']
    

    替换df2的name列中的值

    df2['name'] = df2['name'].replace(df1_dict)
    

    输出:

      ID name
    0  u    s
    1  v   pp
    2  w   ss
    3  x    t
    

    【讨论】:

    • 我的第二个数据帧有字符串作为值,所以它无法解析到它。
    • 我应该在此之前将字符串转换为列表吗?