gpt4 book ai didi

python - 取两个集合 'A' 和 'B' ,如何在 pandas 中创建一个集合 C= A 减去 B

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:32 25 4
gpt4 key购买 nike

考虑我有两个集合“A”和“B”,如何在 pandas 中创建一个集合 C= A 减去 B。这里 A 和 B 是数据帧。 A 是一个包含名字和姓氏作为多索引的数据框。 B 以整数作为索引。名字和姓氏是 B 中的列。

我尝试通过 A['index']=A.index 将 A 的多重索引转换为 A 的列,后来尝试合并 B 和 A。但它不起作用。

答:

csv for A.csv

B:

csv for B.csv

B 的列(f_Name 和 l_name)是 A 的多重索引。

我想要 A 中 f_name 和 l_name 在 B 中不存在的所有行作为输出。我尝试过以下代码:

A['index']=A.index

my_df=pd.merge(A,B,left_on=['F_name','L_name'],right_index=True,how='left']

ans_df=A[~A.index.isin(my_df.index)]

但是 len(and_df) 与 len(A) 相同,这是不正确的。由于B中f_name和l_name很少,所以ans_df的长度应该小于A的长度。

最佳答案

这里是数据框AB

import pandas as pd
import numpy as np

A
Age Gender
F_name L_name
Josh Crammer 25 M
John Smith 29 M
Mellisa Simpson 32 F
Ahemed Khan 26 M
Frank J 25 M
Charles Brown 26 M
William Gibson 26 M

B
F_name L_name
0 Josh Crammer
2 Mellisa Simpson
4 Frank J
5 Charles Brown
6 William Gibson

我们能做的就是重置 A 的索引并像这样就地创建列。

A.reset_index(level=A.index.names, inplace=True)
A
F_name L_name Age Gender
0 Josh Crammer 25 M
1 John Smith 29 M
2 Mellisa Simpson 32 F
3 Ahemed Khan 26 M
4 Frank J 25 M
5 Charles Brown 26 M
6 William Gibson 26 M

现在需要做的就是添加一个 not in 条件来获取我们需要的行:

A[~((A.F_name.isin(B.F_name)) & (A.L_name.isin(B.L_name)))]
F_name L_name Age Gender
1 John Smith 29 M
3 Ahemed Khan 26 M

关于python - 取两个集合 'A' 和 'B' ,如何在 pandas 中创建一个集合 C= A 减去 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41440074/

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