km1*_*234 7 python dictionary pandas
我有一个数据框,我想根据我打算用作字典的另一个数据框重命名列.例如,我作为第一个数据帧的内容是:
AAA BBB CCC DDD
index
1 1 2 3 4
2 5 6 7 8
Run Code Online (Sandbox Code Playgroud)
作为第二个我想用作字典的数据框:
val1 val2
index
1 AAA A7
2 BBB B0
3 CCC C3
4 DDD D1
Run Code Online (Sandbox Code Playgroud)
我想得到的结果如下:
A7 B0 C3 D1
index
1 1 2 3 4
2 5 6 7 8
Run Code Online (Sandbox Code Playgroud)
最初我想将第一个数据帧重新整形为长格式,然后与字典数据帧合并,然后重新整形为宽格式.但是我认为这是非常低效的,所以我想使用更有效的方法(如果存在的话).非常感谢你的帮助.
df.rename有一个叫做columns接受字典的参数:
df.rename(columns=dict(zip(df2["val1"], df2["val2"])))
Run Code Online (Sandbox Code Playgroud)
日期:
A7 B0 C3 D1
0 1 2 3 4
1 5 6 7 8
Run Code Online (Sandbox Code Playgroud)
它返回一个新的DataFrame.您可以使用inplace=True,也可以将其分配回原始DataFrame.
我觉得你可以先创建dictionary从df2,然后创建Series从列df1由to_series您再map使用dictionary:
print df1
AAA BBB CCC DDD
index
1 1 2 3 4
2 5 6 7 8
print df2
val1 val2
index
1 AAA A7
2 BBB B0
3 CCC C3
4 DDD D1
d = df2.set_index('val1').to_dict()
print d['val2']
{'AAA': 'A7', 'BBB': 'B0', 'CCC': 'C3', 'DDD': 'D1'}
df1.columns = df1.columns.to_series().map(d['val2'])
print df1
A7 B0 C3 D1
index
1 1 2 3 4
2 5 6 7 8
Run Code Online (Sandbox Code Playgroud)