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

python pandas countifs using multiple criteria AND multiple data frames

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

我需要根据当前数据框.[=18=的条件在另一个数据框上计算新的记录列数]

参见Excel impression of what I want to do in python, also here。

我的目标?

基本上 Excel 等价物是...

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

...其中 Summary 是主要数据框,Detail 是我要计算记录的辅助数据框。

在我的研究中找到了这些答案:

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

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

基本上你要做的是设置两个数据框,df1 表示 "exams passed" 信息,df2 表示每次考试的分数。

要让自己开始,您可以像这样阅读 excel 文件:

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

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

虽然您首先可能想为 df1 中的每一行制作信息列表,但可以这样做:

student_info = df1[['Student ID', 'Enrollment Date', 'Qualification Date']].values

然后您可以像这样遍历行:

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)])
                          )

然后 add/replace df1 中的列:

df1['Exams Passed'] = N_exams_passed

为了正确比较日期,您需要将它们转换为每个 pandas 数据框中的日期时间对象,我将把这个留给您。提示:您可以使用 pd.to_datetime() 函数。