Pandas 熊猫加入(合并?)数据帧,只保留唯一的标记

Pandas 熊猫加入(合并?)数据帧,只保留唯一的标记,pandas,dataframe,join,merge,Pandas,Dataframe,Join,Merge,我有一个带有日期索引的数据框。有几次约会不知何故失踪了。我将其称为dataframeA。我有另一个数据框,其中包括讨论中的日期。我将此数据帧称为B 我想合并两个数据帧: 保留A的所有索引并将其与B连接,但是我不希望B中的任何行与A共享索引。也就是说,我只希望从B返回A中缺少的行 这是如何最容易实现的 注: 对于我拥有的数据数据库来说,这种行为是正确的。我会做大约400次 如果我没看错问题,你想要的是 B[~B.index.isin(A.index)] 例如: In [192]: A Out[1

我有一个带有日期索引的数据框。有几次约会不知何故失踪了。我将其称为dataframe
A
。我有另一个数据框,其中包括讨论中的日期。我将此数据帧称为
B

我想合并两个数据帧:

保留
A
的所有索引并将其与
B
连接,但是我不希望
B
中的任何行与
A
共享索引。也就是说,我只希望从
B
返回
A
中缺少的行

这是如何最容易实现的

注:


对于我拥有的数据数据库来说,这种行为是正确的。我会做大约400次

如果我没看错问题,你想要的是

B[~B.index.isin(A.index)]
例如:

In [192]: A
Out[192]:
Empty DataFrame
Columns: []
Index: [1, 2, 4, 5]

In [193]: B
Out[193]:
Empty DataFrame
Columns: []
Index: [1, 2, 3, 4, 5]

In [194]: B[~B.index.isin(A.index)]
Out[194]:
Empty DataFrame
Columns: []
Index: [3]
要在
A
中使用数据,或者从
B
中获取数据,您可以执行以下操作

pd.concat([A, B[~B.index.isin(A.index)]).sort_index()
或者,假设
A
不包含您想要保留的空元素,您可以采取不同的方法,选择类似

pd.DataFrame(A, index=B.index).fillna(B)

如果我没看错问题,你想要的是

B[~B.index.isin(A.index)]
例如:

In [192]: A
Out[192]:
Empty DataFrame
Columns: []
Index: [1, 2, 4, 5]

In [193]: B
Out[193]:
Empty DataFrame
Columns: []
Index: [1, 2, 3, 4, 5]

In [194]: B[~B.index.isin(A.index)]
Out[194]:
Empty DataFrame
Columns: []
Index: [3]
要在
A
中使用数据,或者从
B
中获取数据,您可以执行以下操作

pd.concat([A, B[~B.index.isin(A.index)]).sort_index()
或者,假设
A
不包含您想要保留的空元素,您可以采取不同的方法,选择类似

pd.DataFrame(A, index=B.index).fillna(B)
我相信你需要:

编辑:



我相信你需要:

编辑:




虽然有一个很好的答案,但我想分享这一个,因为它太短了

pd.concat([A, B]).drop_duplicates(keep='first')

虽然有一个很好的答案,但我想分享这一个,因为它太短了

pd.concat([A, B]).drop_duplicates(keep='first')

这基本上就是我想要的是的。这样,一旦B被索引,我就可以合并这两个数据帧。我真的不明白你所说的“合并”是什么意思。根据索引的定义,没有数据可以从
A
中获取,因此没有什么可以合并的。我真的不想让它们“合并”,这就是为什么我不确定文章的标题。但我希望将它们连接起来,然后进行排序(是的,我知道熊猫可以连接并将对索引进行排序)。但是由于缺少一个简洁的术语,我写了“合并”,所以,当数据存在时,使用
a
中的数据,如果没有,则使用
B
中的数据;聪明的我猜这会花费更多的内存,但可能不会有什么不同。让我给答案加上其他方法。这基本上就是我想要的。这样,一旦B被索引,我就可以合并这两个数据帧。我真的不明白你所说的“合并”是什么意思。根据索引的定义,没有数据可以从
A
中获取,因此没有什么可以合并的。我真的不想让它们“合并”,这就是为什么我不确定文章的标题。但我希望将它们连接起来,然后进行排序(是的,我知道熊猫可以连接并将对索引进行排序)。但是由于缺少一个简洁的术语,我写了“合并”,所以,当数据存在时,使用
a
中的数据,如果没有,则使用
B
中的数据;聪明的我猜这会花费更多的内存,但可能不会有什么不同。让我在答案上加上其他方法。这是个好主意。在过去,我用了一些非常类似的东西来解决其他需求,我很惊讶我没有想到这一点。我想我只是认为应该有一个“连接”,只从两个数据集中获取唯一的元素(但是……我知道这不是真正的“连接”)。也许我会先试试这个。这个答案的问题是需要按索引删除重复项,所以
.drop\u duplicates(keep='first')
无法使用,因为它按所有列删除重复项,不确定是否需要。如果需要按索引删除重复项,则需要
df1=df1[~df1.index.duplicated()]。sort_index()
使用示例数据检查我的答案以获得解决方案。@jezrael我不知道该行为将应用于每列。知道这一点很有帮助。这是个好主意。在过去,我用了一些非常类似的东西来解决其他需求,我很惊讶我没有想到这一点。我想我只是认为应该有一个“连接”,只从两个数据集中获取唯一的元素(但是……我知道这不是真正的“连接”)。也许我会先试试这个。这个答案的问题是需要按索引删除重复项,所以
.drop\u duplicates(keep='first')
无法使用,因为它按所有列删除重复项,不确定是否需要。如果需要按索引删除重复项,则需要
df1=df1[~df1.index.duplicated()]。sort_index()
使用示例数据检查我的答案以获得解决方案。@jezrael我不知道该行为将应用于每列。知道这一点很有帮助。