【问题标题】:How to create dataframe by randomly selecting from another dataframe?如何通过从另一个数据框中随机选择来创建数据框?
【发布时间】:2021-07-01 01:34:12
【问题描述】:
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

【问题讨论】:

  • 请提供一些 Pythonic 格式的输入数据
  • 我需要构建一个数据框,该数据框由先前数据框的随机选择组成。并且应该只在三角形中。
  • 任何人都可以帮助我。
  • 什么是数据框?列表大小减小的列表?请更具体或提供一些数据
  • 我有一个三角形数据框,我想通过从前一个数据框中随机选择数据来创建另一个三角形数据框。我正在使用 sample() 获取随机数据,但它不是三角形。

标签: python dataframe triangle


【解决方案1】:

您可以使用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

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

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)

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

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

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2021-04-01
    • 2019-08-14
    • 2018-08-20
    • 2020-08-03
    • 2017-04-14
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多