Rag*_*nar 1 python rename dataframe pandas
我有一个 dfdf1用 N 列填充值,另一个df2空用 M 列(M > N)。我有 2 个列表,表示源中的所有列名称df1和匹配的列名称df2,已排序。
前任 : list1[0] -> list2[0]
我可以用旧的 for 循环从df1to填充数据,df2我希望以更pythonic/pandas/function的方式做同样的事情。
df1
A B C D
0 94 18 47 1
1 75 40 30 97
2 14 56 63 89
3 28 74 25 59
Run Code Online (Sandbox Code Playgroud)
list1 = ["A", "B", "C", "D"]
list2 = ["Z1", "Z3", "Z4", "Z8"]
Run Code Online (Sandbox Code Playgroud)
预期输出:
df2
Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8
0 94 18 47 1
1 75 40 30 97
2 14 56 63 89
3 28 74 25 59
Run Code Online (Sandbox Code Playgroud)
想法是rename由列dict的 zip 创建的列名称,然后DataFrame.reindex由第二个 DataFrame 的列名称使用:
df = df1.rename(columns=dict(zip(list1, list2))).reindex(df2.columns, axis=1)
print (df)
Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8
0 94 NaN 18 47 NaN NaN NaN 1
1 75 NaN 40 30 NaN NaN NaN 97
2 14 NaN 56 63 NaN NaN NaN 89
3 28 NaN 74 25 NaN NaN NaN 59
Run Code Online (Sandbox Code Playgroud)
详情:
print (dict(zip(list1, list2)))
{'A': 'Z1', 'B': 'Z3', 'C': 'Z4', 'D': 'Z8'}
print (df1.rename(columns=dict(zip(list1, list2))))
Z1 Z3 Z4 Z8
0 94 18 47 1
1 75 40 30 97
2 14 56 63 89
3 28 74 25 59
Run Code Online (Sandbox Code Playgroud)