填充数据框是列名匹配

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)

jez*_*ael 5

想法是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)