这个问题的灵感来自 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)
