Проверьте, существует ли значение столбца в предыдущих столбцах

#pandas #dataframe #isin

Вопрос:

У меня есть фрейм данных, как показано ниже,

 d = {'Person1': ['Apple', 'Mango'], 'Person2': ['Orange', 'Apple'],  'Person3': ['Orange', 'Apple'], 'Person4': ['Orange', 'Apple'], 'Person5': ['Watermelon', 'Mango']}

df1= pd.DataFrame(data= d)

    Person1 Person2 Person3 Person4 Person5

0    Apple  Orange  Orange  Orange  Watermelon

1    Mango   Apple  Apple   Apple   Mango
 

Я хочу проверить, есть ли у человека один и тот же фрукт, и сохранить значение, если совпадение не найдено,

      Person1 Person2 Person3 Person4 Person5

 0   Apple   Orange  True    True    Watermelon

 1    Mango   Apple  True    True    True
 

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

1. Вы хотите сравнить только Person2 с Person3? Вы можете получить желаемый результат с df1['Person3'] = df1['Person3'].eq(df1['Person2']) помощью, но я сомневаюсь, что это конечный результат.

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

3. Не могли бы вы, пожалуйста, расширить свой пример? Прямо сейчас я не знаю, кого разыскивают.

4. Конечно, я расширил свой пример. Пожалуйста, дайте мне знать, если это все еще не ясно.

Ответ №1:

С небольшой помощью numpy вы можете сделать:

 import numpy as np

for i in range(len(df1)):
        df1.iloc[i, :] = np.where(df1.iloc[i, :].duplicated() == False, df1.iloc[i, :], True)
 

Результатом будет:

   Person1 Person2 Person3 Person4     Person5
0   Apple  Orange    True    True  Watermelon
1   Mango   Apple    True    True        True
 

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

1. можете ли вы также дать мне знать, если мне нужно проверить это только для одного случая. Например, для Apple.

2. Один из способов сделать это-добавить свои ограничения в np.where , как это: df1.iloc[i, :] = np.where((df1.iloc[i, :].duplicated()) amp; (df1.iloc[i, :] == 'Apple') == False, df1.iloc[i, :], True)