Удалить строки на основе количества последней строки в той же группе - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть такая таблица

+---------+------------------+------+------+---------+
| Name    | Task             | Team | Date | Month   |
+---------+------------------+------+------+---------+
| John    | Market study     | A    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| Michael | Customer service | B    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| Joanna  | Accounting       | C    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| John    | Accounting       | B    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| Michael | Customer service | A    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| Joanna  | Market study     | C    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| John    | Customer service | C    | 1    | Month 2 |
+---------+------------------+------+------+---------+
| Michael | Market study     | A    | 1    | Month 2 |
+---------+------------------+------+------+---------+
| Joanna  | Customer service | B    | 1    | Month 2 |
+---------+------------------+------+------+---------+
| John    | Market study     | A    | 1    | Month 3 |
+---------+------------------+------+------+---------+
| Michael | Customer service | B    | 1    | Month 3 |
+---------+------------------+------+------+---------+
| Joanna  | Accounting       | C    | 1    | Month 3 |
+---------+------------------+------+------+---------+
| John    | Customer service | A    | 2    | Month 3 |
+---------+------------------+------+------+---------+
| Michael | Accounting       | B    | 2    | Month 3 |
+---------+------------------+------+------+---------+

У меня есть таблица, подобная приведенной выше.Сначала я хочу идентифицировать строки и распределить их по месяцам.Затем я хочу найти Месяц, в котором было менее 2 дней, и удалить их (в этом случае у Месяца 2 есть только «Дата» 1, поэтому его следует удалить).Я хотел бы, чтобы мой финальный стол был:

+---------+------------------+------+------+---------+
| Name    | Task             | Team | Date | Month   |
+---------+------------------+------+------+---------+
| John    | Market study     | A    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| Michael | Customer service | B    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| Joanna  | Accounting       | C    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| John    | Accounting       | B    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| Michael | Customer service | A    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| Joanna  | Market study     | C    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| John    | Market study     | A    | 1    | Month 3 |
+---------+------------------+------+------+---------+
| Michael | Customer service | B    | 1    | Month 3 |
+---------+------------------+------+------+---------+
| Joanna  | Accounting       | C    | 1    | Month 3 |
+---------+------------------+------+------+---------+
| John    | Customer service | A    | 2    | Month 3 |
+---------+------------------+------+------+---------+
| Michael | Accounting       | B    | 2    | Month 3 |
+---------+------------------+------+------+---------+

Что мне делать?Большое вам спасибо!

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Попробуйте это, используя groupby и filter метод в пандах:

df.groupby('Month').filter(lambda g:(g['Date']>1).any())
1 голос
/ 23 сентября 2019

Первая группа по месяцам, затем используйте метод nunique, чтобы получить месяцы с определенным числом дат:

table = { "Name": ["John", "Michael", "Joanna", "John", "Michael", "Joanna", "John", "Michael", 
"Joanna", "John", "Michael", "Joanna", "John", "Michael"],
"Task": ["Market study", "Customer service", "Accounting", "Accounting", "Customer service", "Market study", "Customer service", "Market study", "Customer service", "Market study", "Customer service", "Accounting", "Customer service", "Accounting"],
"Team":["A", "B", "C", "B", "A", "C", "C", "A", "B", "A", "B", "C", "A", "B"],
"Date": [1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2],
"Month": [1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3]
}

grp = pd.DataFrame(table).groupby("Month")
unique = grp["Date"].nunique()
to_remove = unique[unique == 1].index.values
# to_remove = array([2], dtype=int64)

Затем в df можно удалить строки, в которых указан месяц to_remove.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...