<p>我不清楚为什么要将数据帧转换为头中有date1、date2等。如果目的只是为了让注册学生在某一天的出勤率,我建议另外两种选择(可能有数百种方法)。你知道吗</p>
<pre><code>from datetime import datetime
import pandas as pd
# Small subset of your data
df = pd.DataFrame({'RegistrationNo': ['16SCSE101002']*7,
'StudentName': ['DEREK TIMBER'] * 7,
'Date': ['12/03/2019', '08/03/2019', '12/03/2019', '15/03/2019',
'08/03/2019','22/03/2019', '22/03/2019'],
'ClassAttend': [1,1,1,1,1,0,0]})
# Convert the 'string-dates' to pandas.datetime
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
</code></pre>
<p>选项1,要获取在给定日期为给定注册号参加的类的数量,请使用一个简单的过滤器和<code>sum</code>-函数</p>
<pre><code>reg_no = '16SCSE101002'
reg_date = datetime(2019, 3, 12)
# This gives you what you want
df[(df['RegistrationNo'] == reg_no) & (df['Date']==reg_date)]['ClassAttend'].sum()
</code></pre>
<p>或者如果你想要一个包含每天所有总数的完整列表,那么做一个<code>groupby</code>-<code>sum</code></p>
<pre><code>df_summed = df.groupby(['RegistrationNo', 'StudentName', 'Date'])['ClassAttend'].sum().reset_index()
RegistrationNo StudentName Date ClassAttend
0 16SCSE101002 DEREK TIMBER 2019-03-08 2
1 16SCSE101002 DEREK TIMBER 2019-03-12 2
2 16SCSE101002 DEREK TIMBER 2019-03-15 1
3 16SCSE101002 DEREK TIMBER 2019-03-22 0
</code></pre>
<p>然后您可以使用前面提到的过滤器,而不需要求和。你知道吗</p>
<p>如果你有足够的理由按照你的建议去做,请让我知道(这样我至少可以删除这个答案:))。你知道吗</p>