如何将一行中的值与所有其他行中的值进行比较?

时间:2019-10-10 20:43:34

标签: python pandas dataframe

我想将每一行与熊猫中的所有其他行进行比较。

具有此DataFrame:

index     entity

a           1
            2
            3

b           3
            3
            9

c           10
            0
            1

d           9
            3
            0

我想比赛:

[0,1], [0,2], [0,3] (这些是索引),因为在每一列中都存在1,2,3 (这些是列中的值)。另外,我实际上该如何计算重复的比赛次数?例如,索引A查找具有所有值(一个,两个,三个)的一对,索引C仅查找具有1个值(零)的一对。

我知道我需要将索引为A的行保留在变量中,然后将其与循环中的所有其他行进行比较。完成此操作后,我移至索引为B的行,并对其他所有行(包括索引为A的行)重复执行此操作。

如何在内存中保留一行并对照所有其他行进行检查?

输出可以采用列表[0,1],[0,2]的格式,其中数字为索引。

我现在想到的是一种伪代码:

var = [x for x in e_dataframe.entity]

for rows in e_dataframe.entity:
    for x in var:
        if x == rows:
            print('match', x, ' and ', rows)
        else:
            print('not match ', x , ' and ', rows)

entity在哪里是我们上面带有数值的列。

当然这是错误的,我什么都没有。我莫名其妙地无法写这个循环。

2 个答案:

答案 0 :(得分:0)

对于您要执行的操作,我还不太清楚,但这是您运行的代码的一个版本。请注意对变量名的一些小改动。

var = [x for x in df["entity"]]
#print(var)

for row in df["entity"]:
    #print(row)
    for x in var:
        if x == row:
            print('match', x, ' and ', row)
        else:
            print('not match ', x , ' and ', row)

您是否要查找重复项?我也不明白您提到的索引对背后的逻辑。

答案 1 :(得分:0)

我采用了某种混合方式。但是以某种方式,它只是在寻找重复的值。

首先,我根据实体是否重复(创建了多次)用True / False创建了新列。然后,我遍历实体的元组及其布尔值。我设置了条件来检查是否确实重复了实体,然后将实体值用作熊猫数据框的掩码,以查找所有其他相同的实体。

df_words['dup_check'] = df_words.entity.duplicated(keep=False)
indexes_list = []

for rows in zip(df_words.entity, df_words.dup_check):
    if rows[1] == True:
            i_list = df_words[df_words.entity == rows[0]]
            indexes_list.append(i_list)