我想将每一行与熊猫中的所有其他行进行比较。
具有此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
在哪里是我们上面带有数值的列。
当然这是错误的,我什么都没有。我莫名其妙地无法写这个循环。
答案 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)