Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用.apply应用映射器_Python_Pandas - Fatal编程技术网

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

在python中使用.apply应用映射器,python,pandas,Python,Pandas,这应该很简单,但我想不出来 我有一个“映射器”数据框,看起来像这样: mapper={'old_values':[105,312,269],'new_values':[849,383,628]} df=pd.DataFrame(mapper) 然后,我有另一个数据框,其中有一列包含旧值。我只想将它们全部转换为新的值(例如,所有105应该变成849)。我想我需要使用df.apply,但我找不到一个例子来说明如何做到这一点 提前感谢。最好选择在功能上类似于python字典的方法,以帮助将值从一个系

这应该很简单,但我想不出来

我有一个“映射器”数据框,看起来像这样:

mapper={'old_values':[105,312,269],'new_values':[849,383,628]}
df=pd.DataFrame(mapper)
然后,我有另一个数据框,其中有一列包含旧值。我只想将它们全部转换为新的值(例如,所有105应该变成849)。我想我需要使用df.apply,但我找不到一个例子来说明如何做到这一点

提前感谢。

最好选择在功能上类似于python字典的方法,以帮助将值从一个系列映射到另一个系列,而不是在此处使用慢速的
应用
函数

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'])
但请注意,这将为原始
DF
中找不到的键引入
NaN
(新
DF
遇到的任何看不见的值都将强制为
NaN

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


尽管如此,如果您的目的是简单地替换值并保留丢失的键,那么您可以选择方法


谢谢,第一个选择奏效了。看起来它并没有用NaN替换丢失的钥匙(它只是让钥匙保持不变),很高兴知道这一点。这意味着旧的
DF
是新的一个超集合。如果这个答案有效,那么你可以将它标记为选中的一个。
new_df['old_values'].replace(old_df.set_index('old_values')['new_values'])