尝试在 Python 中使用多个数据框创建相当于 Excel 中跨多个工作表的计数。
我需要新的记录列数另一个数据框根据标准当前数据框.
See Excel印象 https://i.stack.imgur.com/BjgeM.png我也想用 python 做的事情here https://i.stack.imgur.com/fex5j.png.
My goal?
- 考试计数students数据框
- 按学生证
- 考试日期 >= 报名日期
- 考试日期
- 考试成绩 >= 70
基本上,Excel 的等价物是...
=COUNTIFS(摘要!$B$1:$B$11, ">="&详细信息!B2,
摘要!$B$1:$B$11, "=&70,
摘要!$A$1:$A$11, "="&Detail!A2)
...其中“摘要”是主要数据框,“详细信息”是我要计算记录的辅助数据框。
在我的研究中找到了这些答案:
- python 中的 sumifs 函数 https://stackoverflow.com/questions/11035767/sumifs-function-in-python
- 在Python中进行countif的好方法是什么 https://stackoverflow.com/questions/2643850/what-is-a-good-way-to-do-countif-in-python
- Python Pandas 对特定条件进行计数和求和 https://stackoverflow.com/questions/20995196/python-pandas-counting-and-summing-specific-conditions
不完全是我正在寻找的,因为它们不跨越多个数据帧。我能够为singular数据框:
sum(1 for x in students['Student ID'] if x == 1)
sum(1 for x in exams['Exam Grade'] if x >= 70)
基本上你要做的是设置两个数据框,比如说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 数据框中的日期时间对象,我将把它留给您。提示:您可以使用pd.to_datetime()
功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)