我是熊猫新手,我有3个CSV文件从MySql数据库中提取并存储在熊猫数据框中。我为所有3个文件生成了一个顺序ID,如下所示:
df1
id1 key_column1 name1
1 567 qqq
2 898 rrr
3 345 bbb
df2
id2 key_column2 name2
4 967 qqqq
5 998 rrrr
6 945 bbbb
df3
id3 key_column1 key_column2
7 345 967
8 567 945
df1和df2代表2个表,它们的原始key_columns分别是key_column1和key_column2。 df3包含基于df1和df2的key_columns的映射。现在df3必须根据生成的顺序ID进行映射,它必须看起来像这样
df3
id3 id1 id2 key_column1 key_column2
7 3 4 345 967
8 1 6 567 945
我最初尝试合并一列,但没有任何值。
df=pd.merge(df1,df3,left_on=df1['key_column1'],right_on=df3['key_column1'],how='inner')
答案 0 :(得分:1)
您可以根据df3
中的列创建一个字典,并将其用于map
中的值key_column1
:
map_ = dict(zip(df3.key_column1, df3.key_column2))
key_df1 = df1.key_column1.map(map_).fillna(0)
然后merge
两个数据帧现在具有相同的键:
(df1.merge(df2, left_on= key_df1, right_on='key_column2')
.drop(['name1', 'name2'], 1))
id1 key_column1 id2 key_column2
0 1 567 6 945
1 3 345 4 967
答案 1 :(得分:1)
我们可以使用DataFrame.merge
两次来将三个数据帧组合在一起。之后,我们使用DataFrame.iloc
删除不需要的列。
df_all = df3.merge(df2, on='key_column2', suffixes=['', '_2'])\
.merge(df1, on='key_column1', suffixes=['', '_1'])\
.iloc[:, :-4]
print(df_all)
id3 id1 id2 key_column1 key_column2
0 7 3 4 345 967
1 8 1 6 567 945
答案 2 :(得分:1)
这似乎对我有用。
df3.merge(df1,how='left',on='key_column1').merge(df2,how='left',on='key_column2')
id3 key_column1 key_column2 id1 name1 id2 name2
0 7 345 967 3 bbb 4 qqqq
1 8 567 945 1 qqq 6 bbbb