Как я могу проверить, совпадают ли два столбца на основе того, что они имеют одну и ту же строку?

#python #pandas #dataframe

Вопрос:

Я пытаюсь проанализировать имеющийся у меня набор данных, который выглядит следующим образом:

  PRESSEDKEY     PALABRA   COLOR  KEYCORR      RT
     V           HORNO     blue     a        198
 

В принципе, мне нужно проверить, соответствует ли нажатая клавиша правильной клавише (правильная клавиша в нижнем регистре, но это не имеет значения). Итак, здесь нажата клавиша V вместо A, поэтому результат неверен. Возможны следующие варианты: A, V и R.
Мне также нужно увидеть разницу во времени реакции между правильным и неправильным временем, как только я его получу.

Как мне это удается сделать?

Я думал об этом, но это не работает и может быть слишком усердно, чтобы пытаться использовать каждый ключ, если только это не единственный способ сделать это:

 pressed_key = filtered_data['PRESSEDKEY']
keycorr = filtered_data['KEYCORR']

def correctV(pressed_key, keycorr):
   if pressed_key.str.contains('V'):
       if keycorr.str.contains('v'):
           print('Correct')
       else:
           print('Incorrect')
 

Комментарии:

1. Ты пробовал с pressed_key.lower() == keycorr.lower() этим ?

2. @FrancoMorero, который возвращает ошибку атрибута: объект «Серия» не имеет атрибута «ниже»

3. Пожалуйста, ознакомьтесь с учебными пособиями по ПАНДАМ. Они покажут вам, как сравнивать столбцы-и, возможно, даже более важно, как это делать в целом-операция с столбцами.

Ответ №1:

Один из способов, которым вы могли бы это сделать, — создать столбец, в котором будет показано, равно ли нажатие клавиши KEYCORR, а затем получить среднее значение RT (время реакции) для каждой группы:

 # Assign Y/N
df.loc[df['PRESSEDKEY'].str.lower() == df['KEYCORR'],'correct'] ='Y'
df.fillna('N',inplace=True)

# Compare RT
df.groupby('correct')['RT'].mean() 
 

 >>> df

  PRESSEDKEY PALABRA COLOR KEYCORR   RT correct
0          V   HORNO  blue       a  198       N
1          R   HORNO  blue       r  231       Y
2          A   HORNO  blue       a  325       Y
3          V   HORNO  blue       v  111       Y
4          V   HORNO  blue       a  231       N
5          R   HORNO  blue       r  213       Y
6          A   HORNO  blue       v  251       N
7          V   HORNO  blue       a  198       N


>>> df.groupby('correct')['RT'].mean() 

correct
N    219.5
Y    220.0
Name: RT, dtype: float64
 

Комментарии:

1. Спасибо за ответ, это было очень полезно. Однако, когда я пытаюсь понять значение, оно говорит «pandas.core.base. Ошибка данных: Нет числовых типов для агрегирования», как я могу это исправить, поскольку «правильно» не является числовым?

2. Добро пожаловать. Похоже, что ваш столбец RT не является числовым. Сначала попробуйте преобразовать его в числовое значение и дайте мне знать, если ошибка повторится. проверьте эту ссылку.

3. Спасибо вам за помощь! Сначала мне пришлось его преобразовать, так что теперь он работает.