根据条件过滤数据框行 Pandas

时间:2021-02-23 09:56:47

标签: python python-3.x pandas dataframe data-analysis

我有一个像这样的数据框 df

[Datemm/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 获取所有唯一的 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,我需要计数的唯一Student_id

Student_id   unique_date_count
1000101        3
1000102        2
1000103        1

编辑:由于唯一的 subejcts,我不能删除任何行,那么我如何获得每个 Student_id

的唯一日期及其计数

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用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_axisSeries.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 :(得分:0)

首先,您需要:

df_new=df.drop_duplicates()

第二,你可以做value_counts

df_new['Student_id'].value_counts()