来自两个熊猫DataFrame

时间:2019-11-17 13:12:53

标签: python pandas csv

我有两个文件,一个包含数据,一个用于比较。 在文件1中有两列。元素与元素的名称,以及A与值。 在文件2中,有相同元素的阈值,尽管它们的名称略有不同,并且顺序也不相同。

我要做的是在文件2中搜索文件1中的元素。当元素之间匹配时,我将把文件1中的值与文件2中的阈值进行比较。我可以带有str.match或str.contains的内容,但是这些仅返回True / False,并且不允许我继续工作。我尝试使用in运算符进行for循环,但是仅当两个文件中元素的顺序相同时,此方法才有效。而且,我知道应该避免数据帧的循环。

 for j in File2['element']:
            if j in File1['element']:
                print(j)

解决此问题的最佳方法是什么?

文件1:

element A    
aa    6.2        
bb    3.1        
cc    4.7

要比较的文件2:

element     D   E   F        
bb(b)       1   2   3           
aa(a)       1   5   10        
cc(c)      10   20  30

1 个答案:

答案 0 :(得分:0)

file_2 中的细微变化开始。 我的意思是提取 element 的“第一部分”(在左括号之前) 并将其设置为索引:

file_2.set_index(file_2.element.str.extract(r'(?P<elem>\w+)').elem, inplace=True)

然后您可以:

  • file_1 中的 element 设置为索引,
  • 同时移动两个文件
  • 可能会删除 列(源自 file_2 )。

执行此操作的代码是:

file_1.set_index('element').join(file_2, how='left')\
    .drop(columns=['element'])

现在您拥有:

           A   D   E   F
element                 
aa       6.2   1   5  10
bb       3.1   1   2   3
cc       4.7  10  20  30

其中:

  • 键是 名称,
  • A file_1 中的原始列,
  • 其余所有列均来自 file_2

这样,您就不受限于 file_2 中的行顺序。

然后,对于每一行,您可以在 A 之间进行一些比较 和重新命名列。