使用多个条件和多个数据帧的python pandas countifs

2024-09-26 22:53:22 发布

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

尝试在Python中使用多个数据帧创建一个相当于Excel中跨越多个工作表的countifs。在

我需要一个新的列计数记录在另一个数据帧上,基于当前数据帧的条件。在

请参见我想在python中做什么的Excel impression,也可以是here。在

我的目标?在

  • 学生数据帧上统计考试
  • 按学号
  • with examing date>;=注册日期
  • 带检查日期<;=详细日期
  • 考试成绩≥70分

基本上Excel的等价物是。。。在

=COUNTIFS(Summary!$B$1:$B$11, ">="&Detail!B2, Summary!$B$1:$B$11, "<="&Detail!C2, Summary!$C$1:$C$11, ">="&70, Summary!$A$1:$A$11, "="&Detail!A2)

…其中Summary是主数据帧,Detail是我要统计记录的辅助数据帧。在

在我的研究中找到了以下答案:

不是我想要的,因为它们不跨越多个数据帧。我能够为一个单数数据帧创建一个基本的countifs:

sum(1 for x in students['Student ID'] if x == 1)
sum(1 for x in exams['Exam Grade'] if x >= 70)

Tags: 数据in目标forifhere记录summary
1条回答
网友
1楼 · 发布于 2024-09-26 22:53:22

基本上,您要做的是设置两个数据帧,例如df1表示“考试通过”信息,df2表示每个考试的分数。在

要开始学习,您可以阅读excel文件,如下所示:

df1 = pd.read_excel('filename1.xlsx')
df2 = pd.read_excel('filename2.xlsx')

然后,对于df1中的每一行,您需要对df2分段并获得分段数据帧的长度。在

首先,您可能需要列出df1中每一行的信息,可以这样做:

^{pr2}$

然后您可以像这样迭代行:

N_exams_passed = [] # Store counts for each student in a list

for s_id, s_enroll, s_qual in student_info:
    N_exams_passed.append(len(df2[(df2['Student ID']==s_id) &
                                  (df2['Exam Date']>=s_enroll) &
                                  (df2['Exam Date']<=s_qual) &
                                  (df2['Grade']>=70)])
                          )

然后在df1中添加/替换列:

df1['Exams Passed'] = N_exams_passed

为了正确地比较日期,您需要将它们转换为每个pandas数据帧中的datetime对象,我将留给您决定。提示:您可以使用pd.to_datetime()函数。在

相关问题 更多 >

    热门问题