这应该很简单,但我无法弄清楚。
我有一张“映射器”' DataFrame看起来像这样:
mapper={'old_values':[105,312,269],'new_values':[849,383,628]}
df=pd.DataFrame(mapper)
然后我有另一个数据框,其中包含一个包含旧值的列。我只想将它们全部转换为新值(例如,所有105都应该变成849' s)。我想我需要使用df.apply,但我找不到如何做到这一点的例子。
提前致谢。
答案 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'])