尝试使用多个数据框在Python中创建 - 相当于Excel中可以跨越多个工作表的countifs。
我需要根据当前数据框中的条件,在其他数据框上新记录列数。
请参阅我在python中想要做的Excel impression,here。
我的目标?
基本上Excel等价物是......
= COUNTIFS(摘要!$ B $ 1:$ B $ 11,"> ="& Detail!B2, 总结!$ B $ 1:$ B $ 11,"< ="& Detail!C2, 总结!$ C $ 1:$ C $ 11,"> ="& 70, 摘要!$ A $ 1:$ A $ 11," ="& Detail!A2)
...其中Summary是主要数据框,Detail是我要计算记录的辅助数据框。
在我的研究中找到了这些答案:
不是我想要的,因为它们不会跨越多个数据帧。我能够为单数数据框创建基本的标识:
sum(1 for x in students['Student ID'] if x == 1)
sum(1 for x in exams['Exam Grade'] if x >= 70)
答案 0 :(得分:0)
基本上你要做的就是设置两个数据帧,比如说df1
用于"考试通过"每个考试的标记信息和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)])
)
然后添加/替换df1中的列:
df1['Exams Passed'] = N_exams_passed
为了正确比较日期,您需要将它们转换为每个pandas数据帧中的datetime对象,我将把它留给您。提示:您可以使用pd.to_datetime()
功能。