Как исправить: сравнение результатов запроса BigQuery с списком

Я новичок в Python, я ценю любую помощь. Я хочу список действий группы, которые приобрели за 4$ таким образом: purchase_date(1,1,0,1,1,0,1) где purchase_date дата покупки, а arrays indeces+1 дает дни после покупок. 1 означает активный день, 0 означает не активный день. Например 20190203(1,1,1,0,0,0,1) означает, что покупка была 2019-02-03и после этого пользователь был активен 4, 5, 6 и 10 февраля.

Я попробовал код ниже. шаги:

  1. Создана дата с покупками: four_dollar_buyers(user_pseudo_id,purchase_date), Запросил его и загрузил результат в four_dollar_purchases список.
  2. Повторяется на four_dollar покупки
  3. Сделано 2 вспомогательных массива:seven_days_date содержит даты после покупкиseven_days_number должен содержать единицы и нули (активные или нет в данный день)
  4. Итерация по seven_days_date, сделал запрос из таблицы данных на данную дату, что дало идентификаторы активных пользователей в этот день. Загрузить результат запроса в список с именем 'actives'
  5. Если user_id данной покупки в активах, то seven_days_number массив должен измениться от 0 до 1 по данному индексу.
client = bigquery.Client(project="project")

QUERY = ('SELECT * FROM `project.four_dollar_buyers`')
query_job = client.query(QUERY)                             
four_dollar_purchases = list(query_job.result())                        

for row in four_dollar_purchases:                                       

  seven_days_date = ["","","","","","",""]                          
  seven_days_number = [0,0,0,0,0,0,0]                                   

  for i in range(7):
    date_time_obj = datetime.strptime(row[1], '%Y%m%d')                 
    date_time_obj = date_time_obj + timedelta(days=1)+timedelta(days=i)         
    seven_days_date[i] = date_time_obj.strftime("%Y%m%d")                   

  for idx, days in enumerate(seven_days_date):

    QUERY = ('''SELECT DISTINCT user_pseudo_id FROM 
    `project.events_'''+days+'''` WHERE event_name IN 
    ("activity_added")''')
    query_job = client.query(QUERY)
    actives = list(query_job.result())                          


  if row[0] in actives:                                 
    seven_days_number[idx] = 1                              


  print(row[1] + str(seven_days_number))

Там больше нет сообщений об ошибках, но весь результат такой 20181212(0,0,0,0,0,0,0), Так что по какой-то причине вспомогательный массив не меняется, после даты покупки он дает только нули. Я проверил переменные row[0] и actives с помощью pprint, и они оба содержат правильный результат.

2 ответа

Решение
query_job = client.query(QUERY)
actives = list(query_job.result())

for dict in actives:
  if dict[0] == row[0]:
    seven_days_number[idx] = 1

print(row[1] + str(seven_days_number))

Days не является целочисленным типом, как предположил ralaxpy. Таким образом, вы можете использовать перечисление или что-то еще, чтобы изменить список с помощью индекса.

Другие вопросы по тегам