填充数据框与列名称匹配

时间:2020-01-13 08:48:08

标签: python pandas dataframe rename

我有一个df df1,其中N列填充了值,另一个df2空,具有M列(M> N)。 我有2个列表,分别表示df1的所有列名和源df2中的匹配列名(有序)。

例如:list1[0] -> list2[0]

我可以使用旧的for循环将数据从df1填充到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
list1 = ["A", "B", "C", "D"]
list2 = ["Z1", "Z3", "Z4", "Z8"]

预期输出:

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

2 个答案:

答案 0 :(得分:5)

想法是通过列的zip创建的rename的{​​{1}}列名称,然后通过第二个DataFrame的列名称使用DataFrame.reindex

dict

详细信息

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

答案 1 :(得分:2)

尝试一下:

import pandas as pd

# your code

df2 = df1.copy()
df2.columns = ["Z1", "Z3", "Z4", "Z8"]
df2["Z2"] = pd.np.NaN
df2["Z5"] = pd.np.NaN
df2["Z6"] = pd.np.NaN
df2["Z7"] = pd.np.NaN