gpt4 book ai didi

python - 标记和总结访问日志中每月的差距(流失)

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:40 24 4
gpt4 key购买 nike

我有一个看起来像这样的 df:

 visits ={'someID':[111,111,111,222,222,222,333,333],
'Month':[1,3,5,1,2,4,3,4],
'visits':[4,10,5,2,2,2,5,5]}
df = pd.DataFrame.from_dict(visits)


someID Month Visits
111 1 4
111 3 10
111 5 5
222 1 2
222 2 2
222 4 2
333 3 5
333 4 5

数据框应解释为:

用户 111 在第 1 个月访问但在第 2 个月流失并在第 3 个月返回,在第 4 个月流失并在第 5 个月返回。用户 222 在第 1 个月和第 2 个月访问过,在第 3 个月流失并在第 4 个月返回用户 333 在第 3 个月首次访问(他不应在第 1 个月和第 2 个月显示为流失)。

汇总每月流失次数和每月新访问次数的有效方法是什么?churn = 之前访问过但当月没有访问过新访问 = 第一次访问

期望的输出:(

 Month     Churns    New_visits  Totals
2 1 0 1
3 1 1 2
4 1 0 2
5 2 0 1

最佳答案

此解决方案是 hackish 且未优化,但它可能足够快地满足您的目的。

首先,使用 pivot_table 计算每个用户 ID 每月的出现情况:

df2 = df.pivot_table(columns='someID', 
index='Month',
values='visits',
aggfunc='count')
# df2:
# someID 111 222 333
# Month
# 1 1.0 1.0 NaN
# 2 NaN 1.0 NaN
# 3 1.0 NaN 1.0
# 4 NaN 1.0 1.0
# 5 1.0 NaN NaN

创建一个由月份编号索引的空 DataFrame,准备接收整数计数:

result = pd.DataFrame(data=np.zeros(df2.shape[0]),
index=df2.index,
columns=['New_visits'],
dtype=np.int16)

在第一个数据透视表 DataFrame 中,用非 NaN 标记值标记每个用户首​​次访问之前的每个月,例如 -1。使用每个用户的first_valid_index 来统计每个月的新访问者数量:

for col in df2:
fvi = df2[col].first_valid_index()
df2.loc[df2[col].index < fvi, col] = -1
result.loc[fvi, 'New_visits'] += 1
# df2
# someID 111 222 333
# Month
# 1 1.0 1.0 -1.0
# 2 NaN 1.0 -1.0
# 3 1.0 NaN 1.0
# 4 NaN 1.0 1.0
# 5 1.0 NaN NaN

对于每一行,将每个 NaN 计为流失,将每个正值计为访客:

result['Churns'] = df2.isnull().sum(axis=1)
result['Totals'] = df2.gt(0).sum(axis=1)
# result
# New_visits Churns Totals
# Month
# 1 2 0 2
# 2 0 1 1
# 3 1 1 2
# 4 0 1 2
# 5 0 2 1

关于python - 标记和总结访问日志中每月的差距(流失),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46893307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com