【发布时间】:2016-03-24 16:16:22
【问题描述】:
我有一个这样的数组:
year week app_id period
0 2015 22 [g8m4lecv, uyhsx6lo, u9ue1zzo, kw06m3f5, wvqhq... 2015-22
1 2015 23 [608a223c57e1174fc64775dd2fd8cda387cc4a47, ze4... 2015-23
2 2015 24 [kz8udlea, zwqo7j8w, 6d02c9d74b662369dc6c53ccc... 2015-24
3 2015 25 [fgs0qhtf, awkcmpns, e0iraf3a, oht91x5j, mv4uo... 2015-25
4 2015 26 [zwqo7j8w, dzdfiof5, phwoy1ea, e7hfx7mu, 40fdd... 2015-26
还有一个唯一 ID 的 DataFrame:
unique_app_ids
0 g8m4lecv
1 uyhsx6lo
2 u9ue1zzo
3 kw06m3f5
4 wvqhq7d7
5 fucjx9ar
6 ede963a7c7b854938c1196bb83dc3a0924951055
7 ze4rr0vi
我想要做的是,对于 unique_app_ids 中的每个 app_id:
- 在数组数组中根据周期查找它的第一次出现。
- 如果发生,跟踪开始日期并将每周使用量增加一
- 进入下一个周期,如果app_id还在,则加一
- 如果应用 ID 不存在,则停止递增。
然后我想在 weekly usage 的唯一 ids 列中有一个列。
这是我目前所处的位置:
startperiod = True;
stopped = True;
usage = 0
weeklyadoption= adopters['app_id'].values;
def retention_rate(row):
for app_id in retention['unique_app_ids']:
for week in range(len(weeklyadoption)):
if weeklyadoption[week].isin(app_id):
stopped = False;
usage+=1
else:
stopped = True;
return usage
retention['weekly_retention']=retention.apply(retention_rate, axis=1)
其中retention 是唯一ID 的数据框,adopters 是数组数组。但是,我没有测试代码,因为我无法思考:
- 代码当前正在经历每个时期,即使一个时期没有任何内容,它也会爆发。但是,假设第一次使用是向下 4 行,我只想循环开始,然后从它开始的时间段开始递增和突破。
- 如何检查 app_id 不仅在当前行中,而且在自开始使用期以来在该行之前的所有其他行中。
编辑
即使是当前代码也没有循环。我明白了:
AttributeError: ("'numpy.ndarray' object has no attribute 'isin'", u'occurred at index 0')
请注意,weeklyadoption 打印出来时是这样的:
[([array],[array]....)]
【问题讨论】:
标签: python arrays pandas nested