python - 使用 pd.cut() 时如何将一个值与其所属的四分位数或类别相乘?
问题描述
我有一个数据框如下:
import pandas as pd
import numpy as np
data = pd.DataFrame({
'a' : [1, 2, 3, 4, 5],
'b' : [2, 3, 4, 5, 6],
'c' : [-2, -3, -4, 5, 6],
'd' : [2, 3, 4, -2, 6],
'e' : [2, 3, -4, 3, 7],
})
data
a b c d e
0 1 2 -2 2 2
1 2 3 -3 3 3
2 3 4 -4 4 -4
3 4 5 5 -2 3
4 5 6 6 6 7
我正在尝试迭代特定行中的数据行(我选择在留下 3 行数据后找到我的指标)并找到它的值与类别的点积(或四分位数或十分位数,我只选择了 3 个类别) 我试图使用以下代码来实现,但我无法弄清楚如何访问该值所在的类别或类别本身的数量。
final_indicator = []
for row,values in data.loc[3:].iterrows():
sum=0
all_values = data[:row].values.flatten()
final=pd.cut(all_values, 3, labels=[1, 2, 3])
print(final)
for value in values:
sum=sum+value
"""What I actually need here is sum = sum+value*(the category in which the value"""
"""falls i.e. either 1 or 2 or 3). In a case where the value falls in none of the """
"""categories, multiply it 4 instead"""
final_indicator.append(sum)
print(final_indicator)
现在输出:
[2, 3, 1, 3, 3, ..., 3, 3, 1, 3, 1]
Length: 15
Categories (3, int64): [1 < 2 < 3]
[2, 2, 1, 2, 2, ..., 3, 3, 3, 1, 3]
Length: 20
Categories (3, int64): [1 < 2 < 3]
[15, 30]
有人可以提出实现这种乘法的方法吗?
编辑:当我在考虑这个问题时,我意识到,我的假设有一个错误,我正在迭代的新行的一些值可能不会属于任何类别(例如,介于第一类结束和第二类开始之间)。作为一种解决方法,我不介意使用比较操作,例如,如果该值大于第二类的末尾,则应将其分配为第三类。
解决方案
推荐阅读
- javascript - 在 PHP 中通过表单发送 base64 图像时 $_POST 为空
- java - 我们可以使用 swagger-generator 在模型变量上生成 @JsonFormat 吗?
- bash - 比较“n”个纯文本文件并打印每个文件的唯一行数
- web-scraping - 异步循环混合元项目
- amazon-web-services - 如何从 RDS 生成 AWS CloudFormation 模板
- swift - 如何在 Test Bundle swift 中包含文件?
- python - Python中的可迭代对象
- javascript - 具有多个模板/HTML 文件的 Angular 组件
- android - 使用 `Theme.MaterialComponents.Light.NoActionBar` 主题的 Android 菜单项不可见
- java - 为构建器配置 lombok