Я хочу выполнить пользовательскую групповую передачу в моем фрейме данных pandas. У меня есть следующий фрейм данных:
OwnerUserId AnswerCount CommentCount Id CreationDate
3834.0 7.0 4 85 2009-06-28 11:31:29.417
0.0 2.0 0 469 2009-06-29 07:46:13.990
83871.0 3.0 2 918 2009-06-30 01:04:50.903
77090.0 1.0 1 1094 2009-06-30 13:11:48.333
130090.0 1.0 2 1208 2009-06-30 16:15:07.673
.. .. .. .. ..
Для каждого «Id_q» (вопроса) я хочу сгруппировать все записи, сделанные «OwnerUserId» до «CreationDate» вопроса.
Чтобы сделать это, я сортировал с помощью «CreationDate» и выполнял групповую обработку для каждой записи в цикле for. Код приведен ниже. Тем не менее, у меня есть 40K строк, что делает эту операцию чрезвычайно медленной.
Есть ли более быстрые способы сделать это?
result_df = pd.DataFrame()
df = df.sort_values(["CreationDate"]) #sorting
for i, row in df.iterrows():
head_df = df.head(i)
head_df = head_df[head_df.OwnerUserId == row.OwnerUserId]
grouped_df = head_df.groupby('OwnerUserId',
as_index=0).agg({'Id':"count",'CommentCount': "sum", 'AnswerCount': 'sum'})
result_df = result_df.append(grouped_df)
Мне нужен result_df как вывод.