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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas加入(合并?)数据帧,只保留唯一的指标相关的知识,希望对你有一定的参考价值。

我有一个带日期索引的数据框。有几个日期不知何故失踪了。我将这称为数据帧A。我有另一个数据框,其中包含相关日期。我将这个数据框称为B

我想合并两个数据帧:

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

这最容易实现的是什么?

注意:

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

答案

我相信你需要qazxsw poi:

Index.difference

编辑:

B.loc[B.index.difference(A.index)]

A = pd.DataFrame({'A':range(10)}, index=pd.date_range('2019-02-01', periods=10))
B = pd.DataFrame({'A':range(10, 20)}, index=pd.date_range('2019-01-27', periods=10))

df = pd.concat([A, B.loc[B.index.difference(A.index)]]).sort_index()
print (df)
             A
2019-01-27  10
2019-01-28  11
2019-01-29  12
2019-01-30  13
2019-01-31  14
2019-02-01   0
2019-02-02   1
2019-02-03   2
2019-02-04   3
2019-02-05   4
2019-02-06   5
2019-02-07   6
2019-02-08   7
2019-02-09   8
2019-02-10   9
另一答案

如果我正确地阅读了这个问题,你想要的是什么

df1= pd.concat([A, B])
df1 = df1[~df1.index.duplicated()].sort_index()
print (df1)
             A
2019-01-27  10
2019-01-28  11
2019-01-29  12
2019-01-30  13
2019-01-31  14
2019-02-01   0
2019-02-02   1
2019-02-03   2
2019-02-04   3
2019-02-05   4
2019-02-06   5
2019-02-07   6
2019-02-08   7
2019-02-09   8
2019-02-10   9

例如:

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)

以上是关于Pandas加入(合并?)数据帧,只保留唯一的指标的主要内容,如果未能解决你的问题,请参考以下文章

将没有唯一索引的数据帧与 Python 和 Pandas 合并 [重复]

合并两个TRUE / FALSE数据帧列,仅保留TRUE

熊猫合并:合并同一列上的两个数据框,但保留不同的列

使用两个数据帧计算最终值pandas

Python Pandas 加入索引值

在具有不同列名的pandas中连接2个数据帧[重复]