我有一個熊貓據幀school_df
,看起來像這樣:通過迭代大熊貓GROUPBY組
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])
@BobHaffner有一個很好的答案。在盒子外面思考,你可以分組學校,並在日期欄中一次設置索引。然後你可以使用滾動計數,因爲它將按日期排序。這比使用apply方法和檢查每行的len要快得多。查看cumcount http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.cumcount.html –
我同意@BrianPendleton我的方法可能會比您的方法更快,但可能會有一個更好的方法。 –