我有一个像这样的数据帧(df1):
Date Value
19920507 1.02
19930602 1.11
19980802 6.07
我希望根据第二个数据帧(df2)重新映射Date
,如下所示:
Date1 Date2
19920507 1
19930602 2
19980802 3
我正在替换第一个数据框中的Date
,如下所示:
list_1=df2.Date1.tolist()
list_2=df.Date2.tolist()
replacement_map = {int(i1): int(i2) for i1, i2 in zip(list_1, list_2)}
df['Date'] = df['Date'].apply(replacement_map)
但这会返回:
File "C:\Users\Stefano\Anaconda2_2\lib\site-packages\pandas\core\series.py", line 2220, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas\src\inference.pyx", line 1088, in pandas.lib.map_infer (pandas\lib.c:62658)
TypeError: 'dict' object is not callable
答案 0 :(得分:1)
'不可调用'基本上意味着它不是函数,Series.apply
接受函数 - 而不是字典。
请尝试map
:
df['Date'] = df['Date'].map(replacement_map)
注意:要使用map
,您不必将映射转换为字典。索引为键且其值为dict值的系列也可以这样做:
df1['Date'] = df1['Date'].map(df2.set_index('Date1')['Date2'])
df1
Out:
Date Value
0 1 1.02
1 2 1.11
2 3 6.07
当然,merge & join也可以实现这些目标。