首页 > 解决方案 > 使用 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]

有人可以提出实现这种乘法的方法吗?

编辑:当我在考虑这个问题时,我意识到,我的假设有一个错误,我正在迭代的新行的一些值可能不会属于任何类别(例如,介于第一类结束和第二类开始之间)。作为一种解决方法,我不介意使用比较操作,例如,如果该值大于第二类的末尾,则应将其分配为第三类。

标签: pythonpandasdataframe

解决方案


推荐阅读