Итерация по моему отсортированному файлу данных pandas в groupby очень медленная.Есть альтернативы? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу выполнить пользовательскую групповую передачу в моем фрейме данных 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 как вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...