一种寻找满足特定条件的主题的简单方法

2024-06-11 09:23:25 发布

您现在位置:Python中文网/ 问答频道 /正文

如果这太基本了,我很抱歉,但我对python(尤其是熊猫)是一个完全的新手

我有一份大学生人文和数学成绩的样本数据。我想找到(a)在这两个领域至少修过一门课的学生(b)没有修过任何人文课程但至少修过一门数学课程的学生

以下是pd.DataFrame学生的前3行:

Med Humanities               Math
    History Sociology Ethics Calculus LA  Statistics
ID                                              
1   90      96        94     90       91  NaN
2   85      81        NaN    98       NaN 95
3   NaN     NaN       NaN    NaN      70  NaN

下面是我写的。这就可以了,但我想知道是否有一种更简单的方法不用于循环和if条件

bothHS = []
startS = []

for row, col in students.iterrows():
    if pd.notna(col[0:3]).sum()>0:
        if pd.notna(col[3:6]).sum()>0: bothHS.append(row)
    else:
        if pd.notna(col[3:6]).sum()>0: startS.append(row)

在这之后,我还想找到那些选修过其他课程组合的学生,例如:(I)历史和LA或(ii)社会学、微积分和统计学。为此,我添加了更多的if条件,使其更加混乱。有没有处理这些东西的内置函数


Tags: ifcolnan条件学生la课程row
1条回答
网友
1楼 · 发布于 2024-06-11 09:23:25

您可以使用&|操作来为未参加任何人文课程但至少参加过一门数学课程的学生进行选择

df.loc[(df[('Humanities', 'History')] == np.nan) & (df[('Humanities', 'Sociology')] == np.nan) & (df[('Humanities', 'Ethics')] == np.nan) & ((df[('Math', 'Calculus')] != np.nan) | (df[('Math', 'LA')] != np.nan) | (df[('Math', 'Statistics')] != np.nan))]

相关问题 更多 >