python—在熊猫数据帧中按组对范围之间的值进行累积计数
发布时间:2022-05-19 17:44:05 284
相关标签: # node.js
假设我有以下数据。对于每个 user_id,我希望每次差异分数 <= -2 时都获得一个累积计数,直到它达到一个正值。然后计数应重置为零并保持该值,直到该用户遇到下一个 <= -2,然后计数再次从 1 开始,直到达到下一个正值。结果应该等同于我在 cum_count 中的结果。
我知道这应该很容易,但这让我很难过......
df = pd.DataFrame({'user_id': [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3],
'difference_score': [0.0, 1.0, -2.5, -2.5, -0.5, -1.5, 2.25, 2.25, -1.86, 0.0, -0.33, -1.33, -2.33, 0.0, 1.0, -2.67, -0.67, -0.67, 0.67, -0.33, -0.33, 1.0],
'cum_count': [0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 2, 3, 0, 0, 0, 0]})
print(df)
user_id difference_score cum_count
0 1 0.0000 0
1 1 1.0000 0
2 1 -2.5000 1
3 1 -2.5000 2
4 1 -0.5000 3
5 1 -1.5000 4
6 1 2.2500 0
7 1 2.2500 0
8 2 -1.8571 0
9 2 0.0000 0
10 2 -0.3333 0
11 2 -1.3333 0
12 2 -2.3333 1
13 2 0.0000 0
14 3 1.0000 0
15 3 -2.6667 1
16 3 -0.6667 2
17 3 -0.6667 3
18 3 0.6667 4
19 3 -0.3333 5
20 3 -0.3333 6
21 3 1.0000 0
编辑:根据您的解决方案 mozway,我发现了几个实例,其中建议的解决方案没有产生预期的结果。抱歉,我的示例数据不够广泛。我现在扩展了上面的示例数据以突出显示这一点。
例如,在下面更新的数据框中,第 14 行 cum_count 应该为 0,因为它是一个新用户,并且差异分数 > -2。但是,cum_count2 产生 1。
此外,一旦达到正值并且计数重置为 0,下次遇到该用户的值 <= -2 时,计数应重新从 1 开始。但是,在第 19 行,cum_count2 继续从以前的计数。与当前解决方案在 cum_count2 中返回的值相比,更新后的 cum_count 列具有我期望返回的值...
df = pd.DataFrame({'user_id': [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3],
'difference_score': [0.0, 1.0, -2.5, -2.5, -0.5, -1.5, 2.25, 2.25, -1.86, 0.0, -0.33, -1.33, -2.33, -2.0, -1.0, -2.67, -0.67, -0.67, 0.67, -2.5, -0.33, 1.0],
'cum_count': [0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0]})
print(df)
user_id difference_score cum_count cum_count2
0 1 0.00 0 0
1 1 1.00 0 0
2 1 -2.50 1 1
3 1 -2.50 2 2
4 1 -0.50 3 3
5 1 -1.50 4 4
6 1 2.25 0 0
7 1 2.25 0 0
8 2 -1.86 0 0
9 2 0.00 0 0
10 2 -0.33 0 0
11 2 -1.33 0 0
12 2 -2.33 1 1
13 2 -2.00 2 2
14 3 -1.00 0 1
15 3 -2.67 1 2
16 3 -0.67 2 3
17 3 -0.67 3 4
18 3 0.67 0 0
19 3 -2.50 1 5
20 3 -0.33 2 6
21 3 1.00 0 0
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报