#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()