如何将特定列值与同一数据框中的其余相同列值进行比较?
例如,让一个数据帧为df。
df= A B
1 1
2 0
1 0
1 1
2 0
因此,我们必须首先获取A列,然后一个接一个地选择一个值,然后比较其余A值。像,我取1并与[2,1,1,2]之类的其余值进行比较,我发现3rd和4th值相同。所以结果应该给我1 = =
A
false
true
true
false
现在选择2,因为它是第二个元素。输出为
A
false
false
false
true
基本上将每个元素与所有其他元素进行比较
第B,C,D....
列将采用相同的过程
有人会给我任何解决方案的方法吗?
答案 0 :(得分:2)
您可以将列表推导与所有值进行比较而不进行实际比较,该列表推导已被drop
删除:
df1 = pd.concat([df.drop(i) == x for i, x in enumerate(df.values)], keys=df.index)
print (df1)
A B
0 1 False False
2 True False
3 True True
4 False False
1 0 False False
2 False True
3 False False
4 True True
2 0 True False
1 False True
3 True False
4 False True
3 0 True True
1 False False
2 True False
4 False False
4 0 False False
1 True True
2 False True
3 False False
详细信息:
在列表理解中创建数据帧列表:
print ([df.drop(i) == x for i, x in enumerate(df.values)])
[ A B
1 False False
2 True False
3 True True
4 False False, A B
0 False False
2 False True
3 False False
4 True True, A B
0 True False
1 False True
3 True False
4 False True, A B
0 True True
1 False False
2 True False
4 False False, A B
0 False False
1 True True
2 False True
3 False False]
,如果需要,可以通过concat
和keys
的参数MultiIndex
将它们连接在一起,然后可以通过loc
选择每个小的DataFrame:
print (df1.loc[0])
A B
1 False False
2 True False
3 True True
4 False False
答案 1 :(得分:1)
df_final = pd.DataFrame()
# Iterate all columns
for column in df.columns.tolist():
# For the iterated column, iterate the line
for line in range(len(df[column])):
info = "column: " + str(column) + " - line: " + str(line)
# Check if the cells below are equals to the iterated cell
answer = df.loc[df.index > line,column] == df.loc[df.index == line,column].values[0]
# Display the result
print(info)
print(answer)
# Add the result in a dataframe
for line in range(len(answer)):
df_final = df_final.append([[
info,
answer.index[line],
answer.values[line]
]])
# Display the resulting dataframe
df_final.columns = ["position", "index", "check"]
print(df_final)