根据满足条件为熊猫数据框列的匹配索引分配随机值

时间:2020-11-03 13:03:23

标签: python python-3.x pandas random

我正在尝试在python中填充数据。

代码在下面。

该代码的目的是在该范围内选择一个随机值,并根据dataframe列的大小填充panda的变量。 为了实现解决方案,我在for循环中定义了index和item变量 如果满足条件,则在新变量位置的循环变量的索引处添加随机值

import scipy.stats as stats
for index , item in df['RangeCategory']:
    if (item ==  'RC1' ):
        upperLim = 0.5
        lowerLim = 50.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC2' ):
        upperLim = 50
        lowerLim = 250.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC3' ):
        upperLim = 250
        lowerLim = 300.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC4' ):
        upperLim = 300
        lowerLim = 500.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC5' ):
        upperLim = 500
        lowerLim = 900.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC6' ):
        upperLim = 900
        lowerLim = 1500.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC7' ):
        upperLim = 1500
        lowerLim = 3000.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC8' ):
        upperLim = 3000
        lowerLim = 5000.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC9' ):
        upperLim = 5001
        lowerLim = 9000.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC10' ):
        upperLim = 9001
        lowerLim = 10000.4
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC11' ):
        upperLim = 10001
        lowerLim = 30000
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)
    elif (item ==  'RC12' ):
        upperLim = 31000
        lowerLim = 50000
        df["ItemFlagged"][index] =  random.uniform(upperLim, lowerLim)

数据帧具有100K数据。 当前问题:“要解压的值太多”

我遇到了以下问题:“无法解开的价值” 。您能指导我进行更正吗?

预期结果: 根据满足条件分配随机值

最好的问候, 加布(Gabe)

2 个答案:

答案 0 :(得分:0)

使用loc函数分配值:

for index , row in df.iterrows():
    if row['RangeCategory'] == 'RC1':
        upperLim = 0.5
        lowerLim = 50.4
        df.loc[index,"ItemFlagged"] = random.uniform(upperLim, lowerLim)

答案 1 :(得分:0)

这是另一种解决方案,

import random

# define a look up RangeCategory
range_lookup = {"RC1": [0.5, 50.4], "RC2": [50, 250.4]...}

df['ItemFlagged'] = (
    df['RangeCategory'].apply(lambda x: random.uniform(*range_lookup[x]))
)