我有 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 中第一行中不存在的行的新数据框:
newDF:
Chr MapInfo Name SourceSeq Unnamed: 0 rs
8 A8 B8 C8 D8 E8
10 A10 B10 C10 D10 E10
我想用Name
对其进行过滤。有什么更好的方法呢?
我经历了fullouter
合并,但交易方式有所不同,老实说,我不知道如何正确地进行合并。
第二,认为这是一个循环,但效率不高。
最后我尝试通过以下方式来做到这一点:
new= secondDF[~firstDF.Name.isin(secondDF.name)]
但是我得到了
IndexingError:作为索引器提供的不可对齐的布尔系列(布尔系列和被索引对象的索引不匹配
有人可以给我有关该任务的建议吗?
答案 0 :(得分:1)
解决方案就是更改掩码-从secondDF.Name
中按列比较firstDF
,从示例数据中是MapInfo
列,在实际数据中,布尔掩码的Name
列与之相同大小和索引值,例如secondDF
,因为已过滤secondDF
DataFrame:
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