我有一个Pandas数据表school_df
,看起来像这样:
school_id date_posted date_completed
0 A 2014-01-01 2014-01-01
1 A 2014-01-01 2014-01-08
2 A 2014-04-29 2014-05-01
3 B 2014-01-01 2014-01-01
4 B 2014-01-20 2014-02-23
每一行代表该学校的一个项目。我想添加两列:对于每个唯一的school_id,一个是在那个日期之前发布的项目数,另一个是在那个日期之前完成的项目数。
下面的代码可以工作,但是我有大约300,000个唯一的学校,所以运行时间很长。有没有更快的方法来获取我想要的结果?感谢您的帮助!
import pandas as pd
groups = school_df.groupby("school_id")
blank_df = pd.DataFrame()
for g, df in groups:
df['school_previous_projects'] = df.date_posted.map(lambda x: len(df[df.date_posted < x]))
df['school_previous_completed'] = df.date_posted.map(lambda x: len(df[df.date_completed < x]))
blank_df = pd.concat([blank_df, df])