【问题标题】:Create column o difference between two pandas DF创建两个熊猫DF之间的差异列
【发布时间】:2019-08-01 16:18:19
【问题描述】:

我有 firstDF:

rs     Chr      MapInfo         Name       SourceSeq
1       A1       B1              C1          D1
2       A2       B2              C2          D2
3       A3       B3              C3          D3
4       A4       B4              C4          D4
5       A5       B5              C5          D5

还有secondDF:

Chr       MapInfo     Name    SourceSeq       Unnamed: 0       rs
 1          A1          B1        C1             D1            E1
 4          A4          B4        C4             D4            E4
 8          A8          B8        C8             D8            E8
 10         A10         B10       C10            D10           E10

我需要创建一个新的数据框,其中只包含 secondDF 中不存在的行:

新DF:

Chr       MapInfo     Name    SourceSeq       Unnamed: 0       rs
8          A8          B8        C8             D8            E8
10         A10         B10       C10            D10           E10

我想用Name 过滤它。有什么更好的方法来做到这一点?

我经历了 fullouter 合并,但列不同,老实说,我不知道如何正确地做到这一点。

其次,think 是一个循环,但效率不高。

最后我尝试这样做:

new= secondDF[~firstDF.Name.isin(secondDF.name)] 

但我得到了:

IndexingError:作为索引器提供的不可对齐的布尔系列(布尔系列的索引和索引对象的索引不匹配

有人可以就这项任务给我建议吗?

【问题讨论】:

  • "boolean Series 和被索引对象的索引不匹配" ,尝试重置索引
  • 你可以从here获得这方面的帮助
  • 在您的示例中需要new= firstDF[~firstDF.Name.isin(secondDF.name)],两个DataFrame 之间的列值也不匹配?喜欢需要匹配SourceSeq from first with Unnamed: 0 from second

标签: python pandas


【解决方案1】:

解决方案是更改掩码 - 按来自 firstDF 的列比较 secondDF.Name,从样本数据来看,它是 MapInfo 列,在实际数据中似乎是 Name 列,用于布尔掩码具有相同大小和索引值,如 secondDF , 因为被过滤了secondDFDataFrame:

new= secondDF[~secondDF.Name.isin(firstDF.MapInfo)] 
print (new)
   Chr MapInfo Name SourceSeq Unnamed: 0   rs
2    8      A8   B8        C8         D8   E8
3   10     A10  B10       C10        D10  E10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2016-11-13
    • 2022-10-02
    • 1970-01-01
    相关资源
    最近更新 更多