在python中使用.apply来应用映射器

时间:2017-01-12 09:24:27

标签: python pandas

这应该很简单,但我无法弄清楚。

我有一张“映射器”' DataFrame看起来像这样:

mapper={'old_values':[105,312,269],'new_values':[849,383,628]}
df=pd.DataFrame(mapper)

然后我有另一个数据框,其中包含一个包含旧值的列。我只想将它们全部转换为新值(例如,所有105都应该变成849' s)。我想我需要使用df.apply,但我找不到如何做到这一点的例子。

提前致谢。

1 个答案:

答案 0 :(得分:1)

最好选择Series.map方法,它在功能上执行类似于python字典的方法,以帮助将值从一个系列映射到另一个系列,而不是在这里使用慢速apply函数。

df['old_values'].map(df.set_index('old_values')['new_values'])
Out[12]:
0    849
1    383
2    628
Name: old_values, dtype: int64

您需要做的唯一修改是:

new_df['old_values'].map(old_df.set_index('old_values')['new_values'])

但请注意,这会为NaN中找不到的密钥引入DF。(新DF遇到的任何看不见的值都会被强制转换为NaN

如果这是您期望的行为,那么map是一种理想的方法。

虽然,如果您打算简单地替换值并保留以前丢失的密钥,您可以选择Series.replace方法。

new_df['old_values'].replace(old_df.set_index('old_values')['new_values'])