これは私のデータフレームです:
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
これらの条件でパンダのデータフレームを反復処理して重複を削除する方法がわかりません。一般的に、最初の条件では、次のようなことを行います。
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)
私のデータフレームでこれを行う方法に関するヘルプ/ヒントをいただければ幸いです。
これを試して:
df1 = (df[df.Eat.eq('Yes')].sort_values('Person')
.drop_duplicates(subset='Fruits', keep='last'))
Out[14]:
Fruits Person Eat
3 Strawberry Ashley Yes
7 Grape Ashley Yes
0 Banana Peter Yes
4 Cherry Peter Yes
9 Pear Peter Yes
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加