猿问

如何在具有特定条件的熊猫数据框中添加随机值

我正在尝试有条件地在预期范围内添加随机值。


数据 =


LOT NO  QTY(Kgs)    % PICK      11C     12C     13C      14C    15C     16C

H19       312        6.22                       

H20       936        18.67                      

H21       989        19.72                      

H22       559        11.15                      

H23       639        12.74                      

H24       736        14.68                      

H25       843        16.81


其中 11c 到 16C 是具有空值(nans)或零的列。


我想用一组条件添加或替换随机值(int & float)


列中值的平均总和11C应在 9-12.5 之间。

列中值的平均总和12C应在 43-47 之间。3. 4. 其他条件如下

11C    |    12C   |     13C  |   14C    |     15C    |   16C

--------------------------------------------------------------

9-12.5 |  45+/-2  |  205-230 |  5.0-6.0 |  <1000     |  <1500

---------------------------------------------------------------

我的预期输出:


LOT NO    QTY (Kgs)   % PICK    11C     12C     13C  14C    15C 16C

H19       312          6.22     10.50   45.30   247  5.46   53  430

H20       936          18.67    10.38   48.48   265  5.64   67  280

H21       989          19.72    10.62   44.38   264  5.66   73  325

H22       559          11.15    10.97   43.52   226  5.54   62  365

H23       639          12.74    10.89   46.53   205  5.71   84  345

H24       736          14.68    11.09   43.76   165  5.62   93  230

H25       843          16.81    11.01   39.96   137  5.68   95  160


我怎样才能做到这一点?


慕勒3428872
浏览 91回答 2
2回答

呼唤远方

更新好吧,假设df2是您的初始DataFrame.Here 是一个使用dictionaryfor 条件的示例:import pandas as pdimport numpy as npdf = pd.DataFrame()df2 = pd.DataFrame([[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]],&nbsp; &nbsp; &nbsp; columns=['11C', '12C', '13C', '14C', '15C', '16C'])def n(_min, _max=None, rows=7, getint=None):&nbsp; &nbsp; if getint == 'AVG':&nbsp; &nbsp; &nbsp; &nbsp; return [round(x, 2) for x in _min + (_max - _min) * np.random.rand(rows)]&nbsp; &nbsp; _min = int(_min / rows)&nbsp; &nbsp; return np.random.choice(_min, rows)conditions = {'11C': n(9, 12.5, getint='AVG'), '12C': n(43, 47, getint='AVG'), '13C': n(205, 230, getint='AVG'),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '14C': n(5, 6, getint='AVG'), '15C': n(1000, None), '16C': n(1500, None)}for key, val in conditions.items():&nbsp; &nbsp; df[key] = valprint(df)df2.update(df)df2.update(df)将更新其中的所有键,df但df2确保它们具有相同的行数,同时update()将更新现有的行数。结果&nbsp; &nbsp; &nbsp;11C&nbsp; &nbsp; 12C&nbsp; &nbsp; &nbsp;13C&nbsp; &nbsp;14C&nbsp; 15C&nbsp; 16C0&nbsp; 11.37&nbsp; 43.43&nbsp; 223.43&nbsp; 5.66&nbsp; 126&nbsp; 1811&nbsp; 11.67&nbsp; 45.08&nbsp; 217.87&nbsp; 5.80&nbsp; &nbsp;91&nbsp; &nbsp;162&nbsp; &nbsp;9.39&nbsp; 43.95&nbsp; 218.13&nbsp; 5.24&nbsp; &nbsp;69&nbsp; &nbsp;713&nbsp; 12.23&nbsp; 44.74&nbsp; 215.62&nbsp; 5.87&nbsp; &nbsp;11&nbsp; 1294&nbsp; 12.42&nbsp; 45.86&nbsp; 209.75&nbsp; 5.05&nbsp; &nbsp; 5&nbsp; 1325&nbsp; &nbsp;9.49&nbsp; 45.28&nbsp; 227.34&nbsp; 5.83&nbsp; &nbsp; 2&nbsp; &nbsp; 46&nbsp; &nbsp;9.35&nbsp; 45.08&nbsp; 218.40&nbsp; 5.34&nbsp; 129&nbsp; &nbsp;48

慕田峪7331174

你可以像下面那样使用 np.random 函数df = pd.DataFrame()n_rows = 10df["11C"] = 9+ (12.5-9)*np.random.rand(n_rows)df["12C"] = 43+ (47-43)*np.random.rand(n_rows)df["13C"] = 205+ (330-205)*np.random.rand(n_rows)df["14C"] = 5+ (5-6)*np.random.rand(n_rows)df["15C"] = np.random.choice(1000, n_rows)df["15C"] = np.random.choice(1500, n_rows)df
随时随地看视频慕课网APP

相关分类

Python
我要回答