Элегантный способ отбрасывать записи в пандах в зависимости от размера / количества записей - PullRequest
1 голос
/ 08 октября 2019

Это не дубликат. Я не пытаюсь отбросить строки на основе индекса

У меня есть кадр данных, как показано ниже

df = pd.DataFrame({
'subject_id':[1,1,1,1,1,1,1,2,2,2,2,2],
'time_1' :['2173-04-03 12:35:00','2173-04-03 12:50:00','2173-04-05 
12:59:00','2173-05-04 13:14:00','2173-05-05 13:37:00','2173-07-06 
13:39:00','2173-07-08 11:30:00','2173-04-08 16:00:00','2173-04-09 
22:00:00','2173-04-11 04:00:00','2173- 04-13 04:30:00','2173-04-14 
08:00:00'],
'val' :[5,2,3,1,1,6,5,5,8,3,4,6]})
df['time_1'] = pd.to_datetime(df['time_1'])
df['day'] = df['time_1'].dt.day

enter image description here

Я хотел бы удалить записи, основанные на subject_id, если их число <= 5. </p>

Это то, что я пытался

df1 = df.groupby(['subject_id']).size().reset_index(name='counter')
df1[df1['counter']>5] # this gives the valid subject_id = 1 has count more than 5)

Теперь, используя это subject_id, я должен получитьстроки базового фрейма данных для этого subject_id

Для этого может быть элегантный способ.

Я хотел бы получить выходные данные, как показано ниже. Я хотел бы, чтобы у меня были строки базы данных

enter image description here

1 Ответ

3 голосов
/ 08 октября 2019

Использование:

df[df.groupby('subject_id')['subject_id'].transform('size')>5]

Вывод:

   subject_id              time_1  val  day
0           1 2173-04-03 12:35:00    5    3
1           1 2173-04-03 12:50:00    2    3
2           1 2173-04-05 12:59:00    3    5
3           1 2173-05-04 13:14:00    1    4
4           1 2173-05-05 13:37:00    1    5
5           1 2173-07-06 13:39:00    6    6
6           1 2173-07-08 11:30:00    5    8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...