[英]Python Pandas Dataframe get count of rows after filtering using values from multiple columns
我有一个如下所示的数据框。 我想通过获取以下计数来构建数据配置文件。
1) 唯一学生ID的数量(学生数量)我的答案有效:
print(len(df['Student ID'].unique()))
2)独特的学生ID数,其中国际= N(非国际学生人数)
我的答案不起作用: print(len(df1.loc[(df1['Student ID'].unique())['International Student'] == N]))
3)International = N&ATAR 不为null的唯一学生ID的数量(拥有ATAR的非国际学生的数量)
4)ATAR 在 0 至 50 之间的唯一学生ID的数量
其他一些问题:
5)如何创建仅包含唯一学生ID和所有其他列的新数据框 ,在第一个学生ID之后删除每个学生ID的所有行
问题2-5的答案将不胜感激。
Student_ID International marks ATAR
119 N 60 80
119 N 70 80
119 N 75 80
129 Y 78 75
129 Y 60 75
155 Y 85
155 Y 80
df = pd.DataFrame({
'International': ['N', 'N', 'N', 'Y', 'Y', 'Y', 'Y'],
'marks': [60, 70, 75, 78, 60, 85, 80],
'Student_ID': [119, 119, 130, 140, 155, 155, 155],
'ATAR': [80.0, 20.0, np.nan, 50.0, 15.0, np.nan, np.nan]
}).reindex_axis(['Student_ID','International','marks','ATAR'], axis=1)
print (df)
Student_ID International marks ATAR
0 119 N 60 80.0
1 119 N 70 20.0
2 130 N 75 NaN
3 140 Y 78 50.0
4 155 Y 60 15.0
5 155 Y 85 NaN
6 155 Y 80 NaN
Need Series.nunique
主要具有boolean indexing
和loc
用于返回一列( Series
),最后drop_duplicates
用于新df1
:
print(df['Student_ID'].nunique())
4
print(df.loc[df['International'] == 'N', 'Student_ID'].nunique())
2
print(df.loc[(df['International'] == 'N') & (df['ATAR'].notnull()), 'Student_ID'].nunique())
1
print(df.loc[df['ATAR'].between(0,50), 'Student_ID'].nunique())
3
df1 = df.drop_duplicates('Student_ID')
print (df1)
Student_ID International marks ATAR
0 119 N 60 80.0
2 130 N 75 NaN
3 140 Y 78 50.0
4 155 Y 60 15.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.