我正在尝试在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)
答案 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]))
)