我有一个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
答案 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