Сравнение значений столбцов Python Dataframe - PullRequest
0 голосов
/ 28 сентября 2018

Как сравнить конкретное значение столбца с остальными значениями этого же столбца в одном и том же кадре данных?

Например, пусть кадр данных имеет вид df.

df= A  B
    1  1
    2  0
    1  0
    1  1
    2  0

Итак, мы должны сначалавозьмите столбец A, затем выберите одно за другим значение и сравните остаток от значения A.Например, я беру 1 и сравниваю с остальным значением, например [2,1,1,2], и обнаружил, что 3-е и 4-е значения одинаковы.Таким образом, результат должен дать мне 1 =

A
false
true
true
false

Теперь выберите 2, поскольку это второй элемент.Выходные данные будут

A
false
false
false
true

, в основном сравнивать каждый элемент со всеми другими элементами

Этот же процесс пойдет для столбца B,C,D....

Кто-нибудь даст мне какое-нибудь решениекак это сделать?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы можете использовать понимание списка для сравнения всех значений без фактических значений, которые удаляются с помощью 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

Детализация:

При создании списка создания списка DataFrames:

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, если необходимо, тогда можно выбрать каждый маленький DataFrame с помощью loc:

print (df1.loc[0])
       A      B
1  False  False
2   True  False
3   True   True
4  False  False
0 голосов
/ 28 сентября 2018
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...