【发布时间】:2021-03-11 07:42:29
【问题描述】:
我目前正在解决一个问题,我在试图找出解决方案的最佳方法时遇到了困难,也许你们可以帮助我。
我有一个包含来自客户关系呼叫中心的呼叫的数据集,我需要以特定方式对其进行汇总。该公司正在调查新客户的行为,他们认为新客户往往比老客户更频繁地打电话(这是意料之中的,但我需要使其可视化)。所以我需要从某个时期进入公司的客户那里知道,呼叫中心在同一时期和以后的时期接到了多少新客户的电话。
基本上,来自第 1 周订阅的客户,有多少人在第 1 周致电,有多少人在第 2 周致电,等等。
以下是数据集的预览:
date_ref 是通话日期。 cred_date 是订阅日期。
我遇到了一个在 pandas 中使用布尔索引的解决方案,而且,男孩,代码看起来很丑吗!我也不太相信这是否可靠。这是我到目前为止所做的:
# Aggregation functions to be passed to groupby
aggregation = {
'n_creds': ('account_id', pd.Series.nunique),
'n_calls': ('date_ref', 'count')
}
# Groupby splitting dates in weeks and with specified aggregations
mcases_agg = mcases_ready.groupby(pd.Grouper(key = 'cred_date', freq = 'W')).agg(**aggregation)
mcases_idx_list = mcases_agg.index.tolist()
n_calls_list = []
for i, _ in enumerate(mcases_idx_list):
if i == 0:
df = mcases[mcases['cred_date'] <= mcases_idx_list[i]]
n_calls_from_cred_this_week = df[(df['date_ref'] >= mcases_idx_list[i]) & \
(df['date_ref'] < (mcases_idx_list[i + 1]))]['account_id'].nunique()
n_calls_list.append(n_calls_from_cred_this_week)
elif i != len(mcases_idx_list) - 1:
df = mcases[mcases['cred_date'] <= mcases_idx_list[i]]
n_calls_from_cred_this_week = df[(df['date_ref'] >= mcases_idx_list[i]) & \
(df['date_ref'] < (mcases_idx_list[i + 1]))]['account_id'].nunique()
n_calls_list.append(n_calls_from_cred_this_week)
else:
df = mcases[mcases['cred_date'] <= mcases_idx_list[i]]
n_calls_from_cred_this_week = df[(df['date_ref'] >= mcases_idx_list[i])]['account_id'].nunique()
n_calls_list.append(n_calls_from_cred_this_week)
我想听听社区的意见,你们是否遇到过类似的问题以及您是如何解决的,如果还没有,请分享您对实现更直接的代码的建议使用一些我不熟悉的工具。
谢谢!
【问题讨论】:
标签: python datetime data-science aggregation