Skip to main content
 首页 » 编程设计

python之Pandas :用字典的字典中的值填充 NaN 值

2025年05月04日10JustinYoung

这个问题的灵感来自 this other one .

假设我有以下 pandas 数据框:

   TYPE  YEAR  DAY  VALUE 
0  a     2004  10   NaN 
1  b     2005  12   NaN 
2  c     2006  180  NaN 
3  a     2007  127  NaN 
4  b     2008  221  NaN 
5  c     2008  17   NaN 

并且我必须根据以下字典的格式填写 VALUE 列,其格式为 {YEAR: {DAY, VALUE}}:

mydict={2004: {10: 7.1}, 
        2005: {12: 9.19}, 
        2006: {127: 16.04, 180: 12.33}, 
        2007: {55: 21.94, 127: 33.11}, 
        2008: {17: 5.13, 221: 19.17, 300: 10.05}} 

上面帖子给出的答案是使用df.VALUE = df.VALUE.fillna(df.YEAR.map(mydict))。

如何更改此映射以确保它“遵循”数据框中的 YEAR 和 DAY 列?

如果我应用上面的代码片段,我当然会得到:

   TYPE  YEAR  DAY  VALUE 
0  a     2004  10   {10: 7.1} 
1  b     2005  12   {12: 9.19} 
2  c     2006  180  {127: 16.04, 180: 12.33} 
3  a     2007  127  {55: 21.94, 127: 33.11} 
4  b     2008  221  {17: 5.13, 221: 19.17, 300: 10.05} 
5  c     2008  17   {17: 5.13, 221: 19.17, 300: 10.05} 

相反,我的目标是值(value)观。

请您参考如下方法:

您可以使用 assign重写该列:

df['VALUE'] = df.apply(lambda x: mydict[x.YEAR][x.DAY], axis=1) 

或者正如@Maarten Fabré 注意到的那样:

df['VALUE'] = df.apply(lambda x: mydict[x.YEAR].get(x.DAY, np.nan), axis=1)