答案 0 :(得分:3)
基本上,您需要以多种方式之一使用.==
。
using DataFrames
df1 = DataFrame(Col1=["A","B","C"],Col2=["X","Y","Z"])
df2 = DataFrame(Col1=["A","B","D"],Col2=["X","Y","Z"])
这是最短的版本:
julia> Matrix(df1) .== Matrix(df2)
3×2 BitArray{2}:
1 1
1 1
0 1
通过这种方法,您可以使用降号[:]
来获取不匹配值的列表:
julia> Matrix(df2)[:][(.!(Matrix(df1) .== Matrix(df2))[:])]
1-element Array{String,1}:
"D"
如果您想要DataFrame
:
julia> DataFrame((n => df1[!,n] .== df2[!,n] for n in names(df2))...)
3×2 DataFrame
│ Row │ Col1 │ Col2 │
│ │ Bool │ Bool │
├─────┼──────┼──────┤
│ 1 │ 1 │ 1 │
│ 2 │ 1 │ 1 │
│ 3 │ 0 │ 1 │
答案 1 :(得分:3)
AbstractDataFrame
对象支持广播,因此您可以编写:
julia> df1 .== df2
3×2 DataFrame
│ Row │ Col1 │ Col2 │
│ │ Bool │ Bool │
├─────┼──────┼──────┤
│ 1 │ 1 │ 1 │
│ 2 │ 1 │ 1 │
│ 3 │ 0 │ 1 │
或
julia> isequal.(df1, df2)
3×2 DataFrame
│ Row │ Col1 │ Col2 │
│ │ Bool │ Bool │
├─────┼──────┼──────┤
│ 1 │ 1 │ 1 │
│ 2 │ 1 │ 1 │
│ 3 │ 0 │ 1 │
==
和isequal
之间的区别在于,如果您在一个单元格中具有missing
值,它们如何处理这种情况(==
将在这样的情况下产生missing
一个案例,isequal
产生true
/ false
)。
使用Przemyslaw提出的Matrix
方法将忽略列名(并且通常会昂贵,因为它执行数据复制)。 Przemyslaw提出的第二个选项忽略了数据框中的列顺序(在某些情况下,您实际上可能会想要它),并且不检查两个数据框中的列名称集是否相同。