Как удалить ненужные строки в Pandas по условиям
Дан df:
a = pd.DataFrame([{'id': 1, 'b': 1, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 1},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 4, 'd': 0},
{'id': 2, 'b': 1, 'd': 1},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 1},
{'id': 2, 'b': 4, 'd': 0},])
Как можно у каждогоid и в строке, где b == 1, проверить столбец d если он != 0, то удалить все строки с этим id, то есть на выходе должно получиться:
pd.DataFrame([{'id': 1, 'b': 1, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 1},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 4, 'd': 0}])
P.S. в каждом id только одна строка, где b == 1.
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Можно попробовать так:
import pandas as pd
df = pd.DataFrame([{'id': 1, 'b': 1, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 1},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 2, 'd': 0},
{'id': 1, 'b': 4, 'd': 0},
{'id': 2, 'b': 1, 'd': 1},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 0},
{'id': 2, 'b': 2, 'd': 1},
{'id': 2, 'b': 4, 'd': 0},])
res = df.groupby('id').filter(lambda x: (x[x['b']==1]["d"].ne(1)))
res:
id b d
0 1 1 0
1 1 2 0
2 1 2 1
3 1 2 0
4 1 2 0
5 1 2 0
6 1 4 0