受count-consecutive-ones-in-a-dataframe-and-get-indices-where-this-occurs的启发,我想做点不同的事情。
对于此DataFrame,id
是索引。
id day1 day2 day3 day4 day5 day6
1 24 0 0 0 0 0
2 15 0 3 0 0 0
3 9 0 0 0 0 0
4 20 1 0 0 0 0
5 4 0 0 0 0 0
6 3 0 0 1 3 0
7 3 0 0 0 0 0
8 8 0 0 0 2 0
9 8 0 2 0 0 0
10 0 5 2 0 0 0
我想计算有多少id
(用户)在x零活动天数之后将不再有任何活动。
对于给定的功能f(x)
,并假设day6
是最后一天,
f(2)
应该返回8
,因为id
[1,2,3,4,5,7,9,10]
在连续2个连续的0之后变成搅动。
f(4)
应该返回5
,因为id
[1,3,4,5,7]
在连续四个零之后没有任何活动。
我认为实现应为df.apply(f(x), axis=1)
,因此它在每一行上进行迭代并返回一个1 else 0
列。例如df['churn=4'] = df.apply(f(x), axis=1)
将返回:
id day1 day2 day3 day4 day5 day6 'churn=4'
1 24 0 0 0 0 0 1
2 15 0 3 0 0 0 0
3 9 0 0 0 0 0 1
4 20 1 0 0 0 0 1
5 4 0 0 0 0 0 1
6 3 0 0 1 3 0 0
7 3 0 0 0 0 0 1
8 8 0 0 0 2 0 0
9 8 0 2 0 0 0 0
10 0 5 2 0 0 0 0
因此,我可以对新列进行汇总,以获得churn = 4'用户总数。
即使在起草问题时,我自己也有些复杂,如果不清楚,请告诉我。
答案 0 :(得分:0)
合并值,将其转换为整数,然后计算最后一个零。
SELECT substances, 'annex2' AS table_name
FROM annex2
WHERE substances LIKE '%methyl%'
UNION ALL
SELECT substances, 'annex3' AS table_name
FROM annex3
WHERE substances like '%methyl%'
import numpy as np
np.logical_not(df.iloc[:,1:].astype(str).apply(''.join, axis=1).astype(int) % 10**4).astype(int)
表示4个零。10**4
输出:
def f(x, num):
return np.logical_not(int(''.join(x[1:].astype(str)))% 10**num).astype(int)
df.apply(f, num=4, axis=1)