比较Python Pandas Dataframe的列值

时间:2018-09-28 09:17:56

标签: pandas dataframe

如何将特定列值与同一数据框中的其余相同列值进行比较?

例如,让一个数据帧为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....列将采用相同的过程

有人会给我任何解决方案的方法吗?

2 个答案:

答案 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]

,如果需要,可以通过concatkeys的参数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)