我有一个大型数据框(Output_Frame),其中的列由两个字符串列表定义:
output_frame.columns
Out[14]:
MultiIndex([('@:M3WRLD', 'AS1GRO'),
('@:M3WRLD', 'AS1GRO'),
('@:AFM2M2', 'AS1GRO'),
('@:AFM2E2', 'AS1GRO'),
...
names=['Instrument', 'Field'], length=903)
我想将这些列重命名为包含在另一个DataFrame(Key)中的单个字符串。
Name Series_Code Datatype_Code
0 MSCI AC WORLD - CAL FY1 GROWTH SAL @:M3WRLD AS1GRO
1 MSCI AC WORLD - FY2 YOY GROWTH SAL @:M3WRLD AS2GRO
2 MSCI AC WORLD - FY3 YOY GROWTH SAL @:M3WRLD AS3GRO
3 MSCI AC WORLD - CAL FY1 YOY GROWTH @:M3WRLD AF1GRO
再次强调:Output_Frame的列名是来自Key帧的字段'Series_Code'和'Datatype_Code'。我想根据Key中的Name变量重命名Output_Frame的列名。
例如,Output_Frame中的第一列是:
('@:M3WRLD', 'AS1GRO')
我希望它变成:
MSCI AC WORLD - CAL FY1 GROWTH SAL
以下语法是不正确的,但我相信逻辑可以实现。
for col in output_frame.columns:
for row in key.rows:
if (key[row, 'Series_Code'] == col[0]) && (key[row, 'Datatype_Code'] == col[1]):
output_frame.column(col) = key[row, 'Type']
我希望能得到关于修复语法或者提出更好方法的建议,而且最好不需要迭代。我对Python和pandas都很生疏,非常感谢您的帮助。
df.rename(columns={'@:M3WRLD':df.loc[df['@:M3WRLD'].str.contains('@:M3WRLD')==True].tolist()[0])
这段代码结构不是很清晰? - Umar.Hprint(df.iloc[:5,:5])
如果我理解正确,你需要用相应的值替换列名吗? - Umar.H