#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)