需求
我有两个dataframe,第1个dataframe A的columns是[‘id’, ‘A’, ‘B’, ‘C’],第2个dataframe B的columns是[‘id’, ‘1’, ‘2’, ‘3’],其中’id’列A是B的子集,我想通过’id’列进行匹配,把A给扩充成[‘id’, ‘A’, ‘B’, ‘C’, ‘1’, ‘2’, ‘3’]
思路
为了将两个DataFrame A和B根据’id’列进行匹配并扩充,我们可以使用pandas库中的merge函数。由于A中的’id’是B中的子集,我们将使用内连接(inner join)来匹配两个DataFrame中的’id’列。然后,我们将合并结果中的列,以得到您想要的列顺序。以下是实现这一目标的代码:
示例代码
import pandas as pd
# 假设这是您的两个DataFrame A和B
data_A = {
'id': [1, 2, 3],
'A': ['A1', 'A2', 'A3'],
'B': ['B1', 'B2', 'B3'],
'C': ['C1', 'C2', 'C3']
}
data_B = {
'id': [1, 2, 3, 4],
'1': ['X1', 'X2', 'X3', 'Y1'],
'2': ['Y1', 'Y2', 'Y3', 'Z1'],
'3': ['Z1', 'Z2', 'Z3', 'W1']
}
df_A = pd.DataFrame(data_A)
df_B = pd.DataFrame(data_B)
# 使用内连接根据'id'列合并两个DataFrame
merged_df = df_A.merge(df_B, on='id', how='inner')
# 重置列顺序为 ['id', 'A', 'B', 'C', '1', '2', '3']
columns_order = ['id', 'A', 'B', 'C', '1', '2', '3']
merged_df = merged_df[columns_order]
# 输出结果
print(merged_df)
代码讲解
这段代码首先创建了两个示例DataFrame A和B,然后通过merge函数根据’id’列进行内连接合并。最后,我们通过指定columns_order来调整合并后DataFrame的列顺序。
请注意,这个解决方案假设两个DataFrame中的’id’列是可以匹配的。如果存在无法匹配的’id’,它们将不会出现在合并后的DataFrame中。如果您希望保留所有A中的’id’,即使它们在B中没有对应的行,您可以使用左连接(left join)代替内连接。