我是 Python 的新手,感谢所有帮助。我想要一个小组的活动列表,他们以这种方式以 4 美元的价格购买:购买日期在purchase_date(1,1,0,1,1,0,1)
哪里,以及购买后的天数。1 表示活跃日,0 表示非活跃日。例如,表示购买开始,并且用户在 2 月 4 日、5 日、6 日和 10 日之后处于活动状态。purchase_date
arrays indeces+1
20190203(1,1,1,0,0,0,1)
2019-02-03
我尝试了下面的代码。脚步:
- 使用购买创建了一个数据表:
four_dollar_buyers(user_pseudo_id,purchase_date)
。查询它并将结果加载到four_dollar_purchases
列表中。 - 重复
four_dollar
购买 - 制作了 2 个辅助数组:
seven_days_date
包含购买后的日期,seven_days_number
应包含 1 和 0(在给定日期活跃或不活跃) - 遍历
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)
。因此,由于某种原因,辅助数组不会改变,在购买日期之后它只给出零。我用 pprint 检查了变量 row[0] 和 actives,它们都包含正确的结果。