填充数据框是否与列名匹配

2024-09-30 04:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dfdf1,其中N列用value填充,另一个df2为空,其中M列(M>;N)。 我有两个列表,表示df1的所有列名称和源df2中的匹配列名称,按顺序排列

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

我可以用一个旧的for循环来填充从df1df2的数据,我也希望这样做,但是使用一种更具pythonic/pandas/functional的方式

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

Tags: 数据gt名称列表forvaluedf1df2
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

Idea是由列的zip创建的rename列名称,然后使用第二个数据帧的^{}列名称:

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

详细信息

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

相关问题 更多 >

    热门问题