我是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
上进行的,并且用户在2月4日,5日,6日和10日之后一直处于活动状态。
我尝试了以下代码。 步骤:
four_dollar_buyers(user_pseudo_id,purchase_date)
创建了一个数据表。对其进行查询并将结果加载到four_dollar_purchases
列表中。 four_dollar
的购买进行迭代seven_days_date
包含购买后的日期
seven_days_number
应包含一和零(在给定的状态下为活动状态或不为活动状态)
天)seven_days_date
,从
给定日期,则得出当天活动用户的ID。加载
查询结果进入名为“ actives
”的列表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]并使用pprint激活它们,它们都包含正确的结果。
答案 0 :(得分:0)
天不是ralaxpy建议的整数类型。因此,您可以使用枚举或其他方式来使用索引来修改列表。
答案 1 :(得分:0)
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))