python - 在没有任何客户 ID 的情况下汇总客户支出
问题描述
我有 2 列,如下所示。第一列是支出,第二列是从报价开始的月份。不幸的是,没有识别每个客户的 ID。在下面的例子中,有三个客户。例如,前 5 行代表客户 1,接下来的 3 行是客户 2,最后 7 行是客户 3。您可以通过查看months_from_offer 来判断,每个客户从 -x 到 x 个月(x 不是每个客户都必须相同,如此处所示,其中 x=2,1,3 分别为客户 1,2,3)。
我要做的是计算每个客户的报价后支出与报价前支出的差异。我不关心个别客户本身,但我想要一个概述 - 例如,10 位客户的后期/前期差异在 0 美元到 100 美元之间。
作为以下数据的示例,要计算客户 1 的 post/pre offer 差异,它是-$10 - $32 + $23 + $54 = $35
对于客户 2:-$21 + $87 = $66
对于客户 3:-$12 - $83 - $65 + $80 + $67 + $11 = -$2
spend months_from_offer
$10 -2
$32 -1
$43 0
$23 1
$54 2
$21 -1
$23 0
$87 1
$12 -3
$83 -2
$65 -1
$21 0
$80 1
$67 2
$11 3
解决方案
创建标识
s = df['months_from_offer'].iloc[::-1].cumsum().eq(0).iloc[::-1].cumsum()
0 1
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 3
9 3
10 3
11 3
12 3
13 3
14 3
Name: months_from_offer, dtype: int32
然后assign
它
df['id']=s
推荐阅读
- python-3.x - 查找python数组变为正数(但不是负数)的索引
- python - 无法使用 Python 的 BeasutifulSoup4 / 提取从某些 url 中刮取标题
- python - Discord.py 重写和发送图像 - AttributeError: 'list' object has no attribute 'send'
- java - 是否可以为 Java 11 和 java 模块生成休眠元模型?
- c++ - C 样式字符串数组首先有效,然后不可读
- list - 如何在修改列表时迭代 Xamarin.Forms.Maps Map.Pins 列表?
- php - PHP 7.3 遇到非数字值
- python - 在 tensorflow.keras 中使用 BinaryCrossentropy(from_logits=True) 时应该使用什么作为目标向量
- tensorflow - 远程 Tensorboard 不适用于 SSH 隧道
- julia - 使自定义类型不可广播