1
DP 1      DP 2    DP 3     DP 4     DP 5     DP 6     DP 7     DP 8    DP 9    DP 10
(0.519)  (1.117)  (1.152)   0.772       1.490    (0.850)  (1.189)  (0.759)      
0.030    0.047     0.632   (0.608)     (0.322)   0.939     0.346    0.651       
1.290    (0.179)   0.006    0.850      (1.141)   0.758     0.682            
1.500    (1.228)   1.840   (1.594)     (0.282)   (0.907)                
(1.540)  0.689    (0.683)   0.005   0.543                   
(0.197)  (0.664)  (0.636)   0.878                       
(0.942)  0.764    (0.137)                           
0.693    1.647                              
0.197

我有上面的数据框:

我需要使用来自上述数据帧的随机值来使用以下数据帧:

 DP 1       DP 2      DP 3    DP 4         DP 5     DP 6      DP 7     DP 8        DP 9   DP 10
     (0.664)    1.290    0.682    0.030      (0.683)  (0.636)    (0.683)   1.840     (1.540)    
     1.490     (0.907)   (0.850) (0.197)     (1.228)   0.682     1.290     0.939        
     0.047      0.682    0.346    0.689      (0.137)   1.490     0.197          
     0.047      0.878    0.651    0.047      0.047    (0.197)               
     (1.141)    0.758    0.878    1.490      0.651                  
     1.647      1.490    0.772    1.490                         
     (0.519)    0.693    0.346                          
     (0.137)    0.850                               
     0.197 

我试过这段代码:

df2=df1.sample(len(df1))

打印(df2)

但输出是

     DP1       DP2       DP3       DP4       DP5       DP6       DP7       DP8  DP9
    OP8   0.735590  1.762630       NaN       NaN       NaN       NaN       NaN       NaN  NaN
    OP7  -0.999665  0.817949 -0.147698       NaN       NaN       NaN       NaN       NaN  NaN
    OP2   0.031430  0.049994  0.682040 -0.667445 -0.360034  1.089516  0.426642  0.916619  NaN
    OP3   1.368955 -0.191781  0.006623  0.932736 -1.277548  0.880056  0.841018       NaN  NaN
    OP1  -0.551065 -1.195305 -1.243199  0.847178  1.668630 -0.986300 -1.465904 -1.069986  NaN
    OP4   1.592201 -1.314628  1.985683 -1.749389 -0.315828 -1.052629       NaN       NaN  NaN
    OP6  -0.208647 -0.710424 -0.686654  0.963221       NaN       NaN       NaN       NaN  NaN
    OP10       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN  NaN
    OP9   0.209244       NaN       NaN       NaN       NaN       NaN       NaN       NaN  NaN
    OP5  -1.635306  0.737937 -0.736907  0.005545  0.607974       NaN       NaN       NaN  NaN
4

1 回答 1

2

您可以np.random.choice()用于采样。

假设df是这样的:

df = pd.DataFrame({'DP 1': ['(0.519)','0.030','1.290','1.500','(1.540)','(0.197)','(0.942)','0.693','0.197'],'DP 2': ['(1.117)','0.047','(0.179)','(1.228)','0.689','(0.664)','0.764','1.647',np.nan],'DP 3': ['(1.152)','0.632','0.006','1.840','(0.683)','(0.636)','(0.137)',np.nan,np.nan],'DP 4': ['0.772','(0.608)','0.850','(1.594)','0.005','0.878',np.nan,np.nan,np.nan],'DP 5': ['1.490','(0.322)','(1.141)','(0.282)','0.543',np.nan,np.nan,np.nan,np.nan],'DP 6': ['(0.850)','0.939','0.758','(0.907)',np.nan,np.nan,np.nan,np.nan,np.nan],'DP 7': ['(1.189)','0.346','0.682',np.nan,np.nan,np.nan,np.nan,np.nan,np.nan],'DP 8': ['(0.759)','0.651',np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan],'DP 9': [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan],'DP 10': [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]})

#       DP 1     DP 2     DP 3     DP 4     DP 5     DP 6     DP 7     DP 8     DP 9    DP 10
# 0  (0.519)  (1.117)  (1.152)    0.772    1.490  (0.850)  (1.189)  (0.759)      NaN      NaN
# 1    0.030    0.047    0.632  (0.608)  (0.322)    0.939    0.346    0.651      NaN      NaN
# 2    1.290  (0.179)    0.006    0.850  (1.141)    0.758    0.682      NaN      NaN      NaN
# 3    1.500  (1.228)    1.840  (1.594)  (0.282)  (0.907)      NaN      NaN      NaN      NaN
# 4  (1.540)    0.689  (0.683)    0.005    0.543      NaN      NaN      NaN      NaN      NaN
# 5  (0.197)  (0.664)  (0.636)    0.878      NaN      NaN      NaN      NaN      NaN      NaN
# 6  (0.942)    0.764  (0.137)      NaN      NaN      NaN      NaN      NaN      NaN      NaN
# 7    0.693    1.647      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN
# 8    0.197      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN

首先choices从 的所有非空值中提取df

choices = df.values[~pd.isnull(df.values)]

# array(['(0.519)', '(1.117)', '(1.152)', '0.772', '1.490', '(0.850)',
#        '(1.189)', '(0.759)', '0.030', '0.047', '0.632', '(0.608)',
#        '(0.322)', '0.939', '0.346', '0.651', '1.290', '(0.179)', '0.006',
#        '0.850', '(1.141)', '0.758', '0.682', '1.500', '(1.228)', '1.840',
#        '(1.594)', '(0.282)', '(0.907)', '(1.540)', '0.689', '(0.683)',
#        '0.005', '0.543', '(0.197)', '(0.664)', '(0.636)', '0.878',
#        '(0.942)', '0.764', '(0.137)', '0.693', '1.647', '0.197'],
#       dtype=object)

然后为所有非空单元格np.random.choice()取一个:choices

df = df.applymap(lambda x: np.random.choice(choices) if not pd.isnull(x) else x)

#       DP 1     DP 2     DP 3     DP 4     DP 5     DP 6     DP 7     DP 8     DP 9    DP 10
# 0  (0.179)    0.682    0.758  (1.152)  (0.137)  (1.152)    0.939  (0.759)      NaN      NaN
# 1    1.500  (1.152)  (0.197)    0.772    1.840    1.840    0.772  (0.850)      NaN      NaN
# 2    0.878    0.005  (1.540)    0.764  (0.519)    0.682  (1.152)      NaN      NaN      NaN
# 3    0.758  (0.137)    1.840    1.647    1.647  (0.942)      NaN      NaN      NaN      NaN
# 4    0.693  (0.683)  (0.759)    1.500  (0.197)      NaN      NaN      NaN      NaN      NaN
# 5    0.006  (0.137)    0.764  (1.117)      NaN      NaN      NaN      NaN      NaN      NaN
# 6  (0.664)    0.632  (1.141)      NaN      NaN      NaN      NaN      NaN      NaN      NaN
# 7    0.543  (0.664)      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN
# 8  (0.137)      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN
于 2021-04-09T18:38:34.700 回答