通过列名和观察值比较数据帧

2024-06-02 05:39:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数来比较两个数据帧,如果相等则返回True,如果列名和观察值不相等则返回False。你知道吗

def table_equal(A, B):
    var_names = sorted(A.columns)
    Y = A[var_names].copy()
    Y.sort_values(by=var_names, inplace=True)
    Y.set_index([list(range(0,len(Y)))], inplace=True)

    var_names2 = sorted(B.columns)
    Z = B[var_names2].copy()
    Z.sort_values(by=var_names, inplace=True)
    Z.set_index([list(range(0,len(Y)))], inplace=True)

    if Y.equals(Z):
        return True
    else:
        return False

假设我有一个原始表(A),我想将其他表与之进行比较。你知道吗

a   b   c
x   1   hat
y   2   cat
z   3   bat
w   4   rat

我的函数几乎适用于表B的所有排列,但下表除外,下表给出的是True,而不是False

a   c   b
x   1   hat
y   2   cat
z   3   bat
w   4   rat

我的代码有什么改动吗?你知道吗

后续问题:

我希望下面的两个表是真的,在同一个变量中有相同的观测值。你知道吗

    a   b   c
0   x   1   hat
1   y   2   cat
2   z   3   bat
3   w   4   rat

    c   b   a
6   rat 4   w
3   hat 1   x
1   bat 3   z
9   cat 2   y

从piRSquared的解决方案来看,代码是有效的,但是只要观察值相同,我怎么能忽略每个表中的行完全相同呢?你知道吗


Tags: columns函数falsetruenamesvarhatsort
1条回答
网友
1楼 · 发布于 2024-06-02 05:39:28

问题
显然:

A.equals(B)

False

解决方案
使用^{}

重写函数。。。你知道吗

def table_equal(A, B):
    X, Y = A.align(B)
    return (X.values == Y.values).all()

table_equal(A, B)

False

解释 align将返回两个列和索引相同的数据帧。你知道吗

A.align(B)

(
       a  b    c
    0  x  1  hat
    1  y  2  cat
    2  z  3  bat
    3  w  4  rat,

       a    b  c
    0  x  hat  1
    1  y  cat  2
    2  z  bat  3
    3  w  rat  4
)

因为索引是对齐的,所以我们可以比较values属性,看看它们是否都相同。在这种情况下,他们不是。你知道吗

相关问题 更多 >