在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'])