我正在处理学校的课程表数据,需要区分同一门课程的不同时间段。
如果另一个班级有相同的课程,则实际上是该课程的另一个时间段,需要进行区分。这意味着需要添加一个带有会话索引的额外列。
结果应该类似于这样。
如果另一个班级有相同的课程,则实际上是该课程的另一个时间段,需要进行区分。这意味着需要添加一个带有会话索引的额外列。
import pandas as pd
cols = ['course', 'class_name', 'professor']
data = [ ['Math', 'X', 'Bob'],
['Math', 'X', 'Bob'],
['Math', 'Y', 'Bob'],
['English', 'Y', 'Tim'],
['English', 'X', 'Jim'],
['English', 'X', 'Jim'],
]
df = pd.DataFrame(columns=cols, data=data)
# Add session
df['session'] = '?'
print(df)
结果应该类似于这样。
course class_name professor session
0 Math X Bob 0
1 Math X Bob 0
2 Math Y Bob 1
3 Eng. Y Tim 1
4 Eng. X Jim 0
5 Eng. X Jim 0
我想找一个更简单的 pandas
方式来解决这个问题,目前的方法过于复杂。
groups = df.groupby(['course', 'class_name'])
d_sessions = {}
counter = 0
pclass = ""
pcourse = ""
for m_idx in list(groups.groups):
course = m_idx[0]
class_ = m_idx[1]
if class_ != pclass:
counter += 1
if pcourse != course:
counter = 0
pclass = class_
pcourse = course
d_sessions[m_idx] = counter
df.set_index(['course', 'class_name'], inplace=True)
for k, v in d_sessions.items():
df.set_value(col='index', value=v, index=k)
df.reset_index(inplace=True)
df