Python 合并数据帧中的两列,同时保留第一列值

Python 合并数据帧中的两列,同时保留第一列值,python,pandas,Python,Pandas,以下是一个数据帧示例: In [308]: df Out[308]: A B 0 1 1 1 1 2 2 2 3 3 2 4 4 3 5 5 3 6 In [15]: pd.DataFrame({'A': A_concat_B_notin_A, 'B': df['B']}) Out[15]: A B 0 1 1 1 1 2 2 2 3 3 2 4 4 3 5 5 3 6 6 4 NaN 7 5 NaN 8 6

以下是一个数据帧示例:

In [308]: df
Out[308]: 
   A  B
0  1  1
1  1  2
2  2  3
3  2  4
4  3  5
5  3  6
In [15]: pd.DataFrame({'A': A_concat_B_notin_A, 'B': df['B']})
Out[15]:
   A   B
0  1   1
1  1   2
2  2   3
3  2   4
4  3   5
5  3   6
6  4 NaN
7  5 NaN
8  6 NaN
我想合并A和B,同时保持顺序、索引和副本的完整性。同时,我只想从B中获取不在A中的值,因此生成的数据帧应该如下所示:

In [308]: df
Out[308]: 
   A  B
0  1  1
1  1  2
2  2  3
3  2  4
4  3  5
5  3  6
6  4  NaN
7  5  NaN
8  6  NaN
任何指点都将不胜感激。我试着对两列和一个groupby进行concat,但这并没有保留列a的值,因为重复项会被丢弃


我想保留已经存在的内容,但也要添加B中不在A中的值。

要获取B中不在A中的元素,请使用
~
反转(not)运算符的方法:

In [11]: B_notin_A = df['B'][~df['B'].isin(df['A'])]

In [12]: B_notin_A
Out[12]:
3    4
4    5
5    6
Name: B, dtype: int64
然后,您可以使用、sort(如果您使用它返回结果而不是就地执行操作)来附加()这些,并且:

然后创建一个新的数据帧:

In [308]: df
Out[308]: 
   A  B
0  1  1
1  1  2
2  2  3
3  2  4
4  3  5
5  3  6
In [15]: pd.DataFrame({'A': A_concat_B_notin_A, 'B': df['B']})
Out[15]:
   A   B
0  1   1
1  1   2
2  2   3
3  2   4
4  3   5
5  3   6
6  4 NaN
7  5 NaN
8  6 NaN

FWIW我不确定这是否一定是适合您的正确数据结构…

请澄清,假设A有值[1,1,2,4,5],B有值[1,2,3,4,5]。由于A有1,2,4和5,因此不会将B值1,2,4和5相加。但为了保持秩序,3将被添加以保持有序性或保持其在索引中的位置。i、 合并后的列表是这样的A=[1,1,2,3,4,5]B=[1,2,3,4,5,NaN]还是这样的A=[1,1,2,4,5,3]B=[1,2,3,4,5,NaN]?谢谢您的回复。后者很好,即A=[1,1,2,4,5,3]B=[1,2,3,4,5,NaN]很好。这正是我需要的!非常感谢。我缺少的是isin和reset_索引。熊猫是一个伟大的数据处理库。