以下是DataFrame示例:
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
我希望合并A和B,同时保持A中的顺序,索引和重复。同时,我只想从B中获取不在A中的值,因此生成的DataFrame应如下所示:
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进行连接,但是不保留列A值,因为重复项被丢弃。
我想保留已经存在的内容,但也要添加B中不在A中的值。
答案 0 :(得分:0)
要使B中的那些元素不在A中,请将isin
方法与~
invert(非)运算符一起使用:
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
然后您可以使用A附加(concat
)这些,排序(如果您使用order
它返回结果而不是执行操作)和reset_index
:
In [13]: A_concat_B_notin_A = pd.concat([df['A'], B_notin_A]).order().reset_index(drop=True)
In [14]: A_concat_B_notin_A
Out[14]:
0 1
1 1
2 2
3 2
4 3
5 3
6 4
7 5
8 6
dtype: int64
然后创建一个新的DataFrame:
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我不确定这对您来说是否一定是正确的数据结构......