Фильтровать строки фрейма данных на основе условий Pandas

#python #python-3.x #pandas #dataframe #data-analysis

#python #python-3.x #pandas #фрейм данных #анализ данных

Вопрос:

У меня есть такой фрейм данных df :

[ Date : mm/dd/yyyy ]

 Date           Student_id    subject     Subject_Scores
11/30/2020     1000101       Math           70
11/25/2020     1000101       Physics        75
12/02/2020     1000101       Biology        60
11/25/2020     1000101       Chemistry      49
11/25/2020     1000101       English        80
12/02/2020     1000101       Sociology      50
11/25/2020     1000102       Physics        80
11/25/2020     1000102       Math           90
12/15/2020     1000102       Chemistry      63
12/15/2020     1000103       English        71
 

Как я могу получить все уникальные Date s для каждого из отдельных Student_id .

Вывод date_df :

 Date           Student_id
11/30/2020     1000101
11/25/2020     1000101
12/02/2020     1000101
11/25/2020     1000102
12/15/2020     1000102
12/15/2020     1000103
 

Кроме того, мне нужно количество уникальных Date s для каждого из Student_id :

 Student_id   unique_date_count
1000101        3
1000102        2
1000103        1
 

Правки: я не могу удалить ни одной строки из-за уникальных вложенных элементов, так как я могу получить уникальные даты и их количество для каждого из Student_id

Заранее спасибо за помощь!

Ответ №1:

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

 df1 = df[['Date','Student_id']].drop_duplicates()
print (df1)
         Date  Student_id
0  11/30/2020     1000101
1  11/25/2020     1000101
2  12/02/2020     1000101
6  11/25/2020     1000102
8  12/15/2020     1000102
9  12/15/2020     1000103
 

А потом Series.value_counts :

 s = df1['Student_id'].value_counts()
print (s)
1000101    3
1000102    2
1000103    1
Name: Student_id, dtype: int64
 

Последнее, если нужно DataFrame добавить Series.rename_axis и Series.reset_index :

 df2 = s.rename_axis('Student_id').reset_index(name='unique_date_count')
print (df2)
   Student_id  unique_date_count
0     1000101                  3
1     1000102                  2
2     1000103                  1
 

Комментарии:

1. Привет, возможно ли это каким-либо другим способом, кроме df.drop_duplicates() ? Поскольку мой расширенный набор данных содержит другую информацию (т.Е. Уникальную subject для каждого Student_id ), поэтому я не могу удалять повторяющиеся строки.

2. @PNyak — Как ты думаешь df[['Date','Student_id']].drop_duplicates() ?

Ответ №2:

во-первых, вам нужно сделать:

 df_new=df.drop_duplicates()
 

Во-вторых, вы можете сделать value_counts ,

 df_new['Student_id'].value_counts()