如何计算数据框列每月的流失次数

时间:2019-04-02 19:59:15

标签: python pandas

我有一个数据框架,其中记录了2011年至2018年的数据。其中一列包含drop_off_date,这是客户离开奖励计划的日期。我想计算2011年至2018年之间每个月有多少人下降。因此,对于84个月的时间段,我需要使用drop_off_date列的下班人数。

我将列更改为日期时间,我知道我可以使用.agg和.count方法,但是我不确定如何每月进行计数。老实说,我不知道下一步将是什么。

数据示例:

Record ID | store ID | drop_off_date

a1274c212| 12876| 2011-01-27

a1534c543| 12877| 2011-02-23

a1232c952| 12877| 2018-12-02

结果应如下所示:

Month:    | #of dropoffs:

Jan 2011  |   15

........  

Dec 2018  |   6

2 个答案:

答案 0 :(得分:1)

使用数据

我假设您的日期已强制转换为datetime值,并使用errors='coerce'处理异常值。

然后您应该从中删除所有不适用项,以便仅与放弃的客户打交道。

您可以通过多种方式执行此操作,我将执行简单的df.dropna(subset=['drop_off_date'])

print(df)
Record ID   store ID    drop_off_date
0   a1274c212   12876   2011-01-27
1   a1534c543   12877   2011-02-23
2   a1232c952   12877   2018-12-02

让我们创建一个月份列以用作汇总

df['Month'] = df['drop_off_date'].dt.strftime('%b')

然后我们可以对记录ID进行简单的分组依据作为计数。 (假设您只想计算唯一ID)?

df1 = df.groupby(df['Month'])['Record ID'].count().reset_index()
print(df1)
    Month   Record ID
0   Dec 1
1   Feb 1
2   Jan 1

编辑:要占几年。

首先让我们创建一个年度助手列

df['Year'] = df['drop_off_date'].dt.year
df1 = df.groupby(['Month','Year' ])['Record ID'].count().reset_index()
print(df)
    Month   Year    Record ID
0   Dec 2018    1
1   Feb 2011    1
2   Jan 2011    1

答案 1 :(得分:1)

我建议直接使用drop_off_ym列中的字符串并将其剥离以仅保留年份和月份:

df['drop_off_ym'] = df.drop_off_date.apply(lambda x: x[:-3]) 

然后将groupby应用于新创建的列,然后再应用count():

df_counts_by_month = df.groupby('drop_off_ym')['StoreId'].count()