Pandas Перебирает строки, сравнивает значение столбца со строкой в списке, возвращает значение из другого столбца

#python #pandas #loops #for-loop

#python #pandas #циклы #for-цикл

Вопрос:

В настоящее время я пытаюсь выполнить итерацию по фрейму данных, сравнить каждое значение в списке строк со значением в определенном столбце фрейма данных. Если это сравнение верно, то добавьте значения из другого столбца той же строки в отдельный список.

 list_of_words = 'yes', 'no', 'maybe'
appendList = []
    for word in list_of_words: 
        for row in dataframe1.iterrows():
            if row['A'] == word:
                appendList.append(row['B'])
                return appendList
  

Проблема в том, что я не уверен, как сравнить значение в списке со значением столбца. Я довольно новичок в pandas и python в целом, но до сих пор удобные методы были великолепны. Просто не уверен, как с этим работать, чтобы вернуть то, что мне нужно. Мы будем признательны за любую помощь или совет в любых документах, которые могли бы помочь!

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

1. dataframe1[dataframe1[‘A’].isin(list_of_words)][‘B’].tolist() ?

2. Спасибо, Крис А! Это сработало отлично. Теперь у меня есть список, который я затем могу использовать.

Ответ №1:

Попробуйте следующее:

 list_of_words = ['yes', 'no', 'maybe']

appendList = dataframe1.B[dataframe1.A.isin(list_of_words)]
  

Ответ №2:

В вашем примере каждый row кортеж из двух элементов, который индексируется с использованием целого числа: row[0] это номер строки и row[1] это pandas.Серии. Таким образом, использование выражения является ошибкой типа row['A'] .

 >>> row['A']
TypeError: tuple indices must be integers or slices, not str
  

Вы можете преобразовать pandas.Series в обычный список python, содержащий элементы этой строки, используя pandas.Серии.tolist() и затем выполняет сравнение:

 for row in dataframe1.iterrows():
    row_data = row[1].tolist() 
    if row_data[0] == word:
        appendList.append(row_data[1])
  

Будучи списком, row_data должен быть проиндексирован с использованием целого числа. Это делает ваш код менее читаемым.

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

1. Сейчас это запущено, я буду держать вас в курсе. Спасибо