मुझे एक कॉलम पर काम करने की जरूरत है, और एक शर्त के आधार पर (यदि यह सच है), प्रविष्टि के लिए कुछ यादृच्छिक संख्याएं भरने की जरूरत है (स्थिर स्ट्रिंग/संख्या नहीं)। लूप और इसके कामकाज के साथ प्रयास किया, लेकिन np.select या np.where शर्तों के समान आगे बढ़ने का कोई अन्य तेज़ तरीका?

मैंने लूप और इसके कामकाज के लिए लिखा है: 'NUMBER' कॉलम में 1000 से अधिक के साथ कुछ प्रविष्टियां हैं, मुझे उन्हें (120,123) के बीच किसी भी यादृच्छिक फ्लोट द्वारा प्रतिस्थापित करने की आवश्यकता है, वही बी/डब्ल्यू 120-123 नहीं। मैंने np.random.uniform का उपयोग किया है और यह भी काम कर रहा है।

    for i in range(0,len(data['NUMBER'])):
        if data['NUMBER'][i] >=1000:
        data['NUMBER'][i]=np.random.uniform(120,123)\

    '''The o/p for this code fills each entries with different values 
     between (120,123) in random,after replacement the entries are'''
     0          7.139093
     1         12.592815
     2         12.712103
     3        **120.305773**
     4         11.941386
     5         **122.548703**
     6         6.357255.............etc

    ''' but while using codes using np.select and np.where as shown below(as 
     it will run faster) --> the result was replaced by same number alone 
     for all the entries satisfying the condition. for example instead of 
     having different values for the indexes 3 and 5 as shown above it 
     have same value of any b/w(120,123 ) for all the entries. please 
     guide here.'''

    data['NUMBER'] =np.where(data['NUMBER'] >= 1000,np.random.uniform(120,123), data['NUMBER'])

    data['NUMBER'] = np.select([data['NUMBER'] >=1000],[np.random.uniform(120,123)], [data['NUMBER']])
0
Ayyasamy 16 अगस्त 2019, 14:51

1 उत्तर

सबसे बढ़िया उत्तर

np.random.uniform(120, 123) एक एकल यादृच्छिक संख्या है:

In [1]: np.random.uniform(120, 123)
Out[1]: 120.51317994772921

यादृच्छिक संख्याओं की एक सरणी बनाने के लिए size पैरामीटर का उपयोग करें:

In [2]: np.random.uniform(120, 123, size=5)
Out[2]: 
array([122.22935075, 122.70963032, 121.97763459, 121.68375085,
       121.13568039])

इसे np.where (दूसरे तर्क के रूप में) पास करने से np.where को इस सरणी से चयन करने की अनुमति मिलती है जब स्थिति सही होती है:

data['NUMBER'] = np.where(data['NUMBER'] >= 1000,
                          np.random.uniform(120, 123, size=len(data)),
                          data['NUMBER'])

एक से अधिक शर्त होने पर np.select का प्रयोग करें। चूँकि यहाँ केवल एक ही शर्त है, np.where का प्रयोग करें।

3
unutbu 16 अगस्त 2019, 14:59