gpt4 book ai didi

python - 在 Pandas 中执行连接

转载 作者:搜寻专家 更新时间:2023-10-30 23:32:33 25 4
gpt4 key购买 nike

我熟悉pandas的join

pd.merge(A,B,on='key',how='inner')

但是我该如何在 pandas 中为这 3 个给定的连接编写查询,因为它们需要 IF NULL enter image description here

最佳答案

设置

A = pd.DataFrame(dict(key=range(0, 5), col1=list('abcde')))
B = pd.DataFrame(dict(key=range(2, 7), col2=list('vwxyz')))

print(A, B, sep='\n' * 2)

col1 key
0 a 0
1 b 1
2 c 2
3 d 3
4 e 4

col2 key
0 v 2
1 w 3
2 x 4
3 y 5
4 z 6

使用pd.DataFrame.merge

最直接的方法是使用 indicator 参数。

A.merge(B, 'outer', indicator=True)

col1 key col2 _merge
0 a 0 NaN left_only
1 b 1 NaN left_only
2 c 2 v both
3 d 3 w both
4 e 4 x both
5 NaN 5 y right_only
6 NaN 6 z right_only

然后我们可以使用pd.DataFrame.query

A - B

A.merge(B, 'outer', indicator=True).query('_merge == "left_only"')

col1 key col2 _merge
0 a 0 NaN left_only
1 b 1 NaN left_only

B - A

A.merge(B, 'outer', indicator=True).query('_merge == "right_only"')

col1 key col2 _merge
5 NaN 5 y right_only
6 NaN 6 z right_only

对称差分

A.merge(B, 'outer', indicator=True).query('_merge != "both"')

col1 key col2 _merge
0 a 0 NaN left_only
1 b 1 NaN left_only
5 NaN 5 y right_only
6 NaN 6 z right_only

使用pd.Series.isin(大部分)

但是,我想简单地使用 pd.Series.isin 作为 bool 掩码。

A - B

A[~A.key.isin(B.key)]

col1 key
0 a 0
1 b 1

B - A

B[~B.key.isin(A.key)]

col2 key
3 y 5
4 z 6

对称差分

A[~A.key.isin(B.key)].append(B[~B.key.isin(A.key)])

或者

A.append(B).drop_duplicates('key', keep=False)

col1 col2 key
0 a NaN 0
1 b NaN 1
3 NaN y 5
4 NaN z 6

关于python - 在 Pandas 中执行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47428758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com