Это мой фрейм данных:
Fruits Person Eat
Banana Peter Yes
Banana Ashley Yes
Strawberry Peter No
Strawberry Ashley Yes
Cherry Peter Yes
Orange Peter No
Orange Ashley No
Grape Ashley Yes
Pear Ashley Yes
Pear Peter Yes
В моем фрейме данных есть дубликаты фруктов.Мне нужно удалить дубликаты на основе следующей логики.Если есть дублированный фрукт, и Питер и Эшли оба его едят, то строка Питера сохраняется, а строка Эшли удаляется.Если есть повторяющиеся фрукты, и Питер не ест их, а Эшли ест их, то строка Питера удаляется, а строка Эшли остается.Если есть повторяющиеся фрукты, и Питер не ест их, а Эшли не ест их, тогда удаляются обе строки.
С этой логикой фрейм данных должен выводить как:
Fruits Person Eat
Banana Peter Yes
Strawberry Ashley Yes
Cherry Peter Yes
Grape Ashley Yes
Pear Peter Yes
Я не уверен, как перебрать фрейм данных pandas с этими условиями, чтобы удалить дубликаты.Как правило, для первого условия я бы сделал что-то вроде этого:
data = [
{
"fruit": "Apple",
"person": "Ashley",
"eats": True
},
{
"fruit": "Apple",
"person": "Peter",
"eats": True
}
]
eats = dict()
for i, row in enumerate(data):
fruit = row["fruit"]
person = row["person"]
does_eat = row["eats"]
# mark whether person eats fruit
if not eats.get(person):
eats[person] = dict()
# if person does eat, record row number for later deletion if needed if does_eat:
eats[person][fruit] = i
# dedup
if person == "Peter" and eats.get("Peter") and eats["Peter"].get(fruit):
data.pop(eats["Ashley"][fruit])
elif person == "Ashley" and eats.get("Peter") and eats["Peter"].get(fruit):
data.pop(i)
Любая помощь / советы о том, как сделать это с моим фреймом данных, будет очень признательна.