计算时间序列中首次二进制指标的数量

我有一个数据框,它使用二进制指标来反映客户在特定月份是否在线。如果客户在线,则为 1,否则为 0。数据框如下所示:


Customer    A   B   C   D   E   F   G   H   I   J

11/30/2015  1   0   1   0   0   1   1   0   0   0

12/31/2015  0   1   0   1   0   1   1   0   0   1

1/31/2016   0   0   0   0   0   1   1   0   0   1

2/29/2016   1   1   1   1   1   1   0   1   1   1

3/31/2016   1   1   0   1   1   0   1   1   0   1

4/30/2016   0   1   1   1   0   1   1   1   0   1

5/31/2016   1   1   1   1   1   1   0   1   0   1

当客户首次上线时,他们会在特定月份获得 1。因此,当特定客户拥有他们的第一个 1 时,这就是他们“新”的月份。


我想在数据框的末尾添加一列,计算“新”客户的数量。


我认为最有效的方法是将第 0 行到第 i 行的值相加,并计算总和等于 1 的次数。当该总和大于 1 时,客户将存活 2月并且不是给定月份的新客户。


我已经使用这种方法在 excel 中进行了计算,但我不清楚如何在 Python 中进行计算。


生成的数据框如下所示:


Customer    A   B   C   D   E   F   G   H   I   J   New_Customers

11/30/2015  1   0   1   0   0   1   1   0   0   0   4

12/31/2015  0   1   0   1   0   1   1   0   0   1   3

1/31/2016   0   0   0   0   0   1   1   0   0   1   0

2/29/2016   1   1   1   1   1   1   0   1   1   1   3

3/31/2016   1   1   0   1   1   0   1   1   0   1   0

4/30/2016   0   1   1   1   0   1   1   1   0   1   0

5/31/2016   1   1   1   1   1   1   0   1   0   1   0


千万里不及你
浏览 155回答 2
2回答

慕桂英3389331

通过定义自定义new函数并使用DataFrame.expanding. 我不确定为什么expanding().apply(new)需要从floatto转换的结果int,但是嘿,它有效:def new(column):    return column[-1] and not any(column[:-1])result = df.expanding().apply(new).sum(axis=1).astype(int)print(result)Out:11/30/2015    412/31/2015    31/31/2016     02/29/2016     33/31/2016     04/30/2016     05/31/2016     0dtype: int32

largeQ

您可以应用累积最大值,它可以转发每列的“1”并对轴 1 中的所有列求和并计算差异。第一个值由 null 给出,您可以通过对第一行求和来填充df1 = df[df.columns.difference(['Customer'])]df['New_customers'] = df1.cummax().sum(1).diff().fillna(df1.loc[0].sum())出去:Customer    A   B   C   D   E   F   G   H   I   J   New_customers0   11/30/2015  1   0   1   0   0   1   1   0   0   0   4.01   12/31/2015  0   1   0   1   0   1   1   0   0   1   3.02   1/31/2016   0   0   0   0   0   1   1   0   0   1   0.03   2/29/2016   1   1   1   1   1   1   0   1   1   1   3.04   3/31/2016   1   1   0   1   1   0   1   1   0   1   0.05   4/30/2016   0   1   1   1   0   1   1   1   0   1   0.06   5/31/2016   1   1   1   1   1   1   0   1   0   1   0.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python