Python Pandas:连接数据帧

Python Pandas: Joining Dataframes

提问人:NEWBIE 提问时间:11/17/2022 最后编辑:NEWBIE 更新时间:11/18/2022 访问量:33

问:

我有表A和表B。我想加入他们以获得表 C。我尝试了以下代码。但它并没有给我我想要的结果。

C = pd.merge(A, B, how = 'inner', left_on = ['ID1', 'ID2', 'ID3'], right_on = ['IDA', 'IDB', 'IDC'])

表A

HDP的 编号2 高动态范围 颜色
一个 1 1 Y
B 1 2 Y
一个 1 3 绿 N
E 2 3 Y
D 4 5 N
C 6 7 N
F 9 7 Y

表B

艾达 美洲开发银行 IDC公司
一个 1 1
F 9 7
一个 1 3
D 4 5

表C

HDP的 编号2 高动态范围 颜色
一个 1 1 Y
一个 1 3 绿 N
D 4 5 N
F 9 7 Y
Python Pandas 数据帧

评论


答:

1赞 Naveed 11/17/2022 #1

这是一种方法

# do a left merge and rop the null rows
out=(pd.merge(df, df2, 
          how = 'left', 
          left_on = ['ID1', 'ID2', 'ID3'], 
          right_on = ['IDA', 'IDB', 'IDC'])
 .dropna()
 .drop(columns=['IDA', 'IDB','IDC']))

ID1     ID2     ID3     Color   Flag
0   A   1   1   White   Y
2   A   1   3   Green   N
4   D   4   5   Blue    N
6   F   9   7   Black   Y

或者,如果这些是 DF 中唯一的列,您可以将它们转换为字符串以使它们具有相同的类型。这也仅适用于联接,不影响 DF

(pd.merge(df.astype(str), df2.astype(str), 
          how = 'left', 
          left_on = ['ID1', 'ID2', 'ID3'], 
          right_on = ['IDA', 'IDB', 'IDC'])
 .dropna()
 .drop(columns=['IDA', 'IDB','IDC']))
    ID1     ID2     ID3     Color   Flag
0   A   1   1   White   Y
2   A   1   3   Green   N
4   D   4   5   Blue    N
6   F   9   7   Black   Y

评论

0赞 Naveed 11/18/2022
它对你有用吗?
0赞 NEWBIE 11/18/2022
不。如果 Col ID1 和 IDA 具有不同的数据类型,这会影响任何事情吗?
0赞 Naveed 11/18/2022
@NEWBIE,是的,类型需要相同。它们中的每一个的数据类型是什么?
0赞 Naveed 11/18/2022
@NEWBIE,请参阅替代解决方案