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_索引。熊猫是一个伟大的数据处理库。