आप np.where का उपयोग कर सकते हैं । तो cond
एक बूलियन सरणी है, और A
और B
सरणियों, तो कर रहे हैं
C = np.where(cond, A, B)
सी को परिभाषित करता है A
कि cond
यह कहां तक सही है और B
कहां cond
गलत है।
import numpy as np
import pandas as pd
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df['que'] = np.where((df['one'] >= df['two']) & (df['one'] <= df['three'])
, df['one'], np.nan)
पैदावार
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
यदि आपके पास एक से अधिक स्थितियां हैं, तो आप इसके बजाय np.select का उपयोग कर सकते हैं । उदाहरण के लिए, यदि आप df['que']
समान df['two']
होने की इच्छा रखते हैं df['one'] < df['two']
, तो
conditions = [
(df['one'] >= df['two']) & (df['one'] <= df['three']),
df['one'] < df['two']]
choices = [df['one'], df['two']]
df['que'] = np.select(conditions, choices, default=np.nan)
पैदावार
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
अगर हम यह मान सकते हैं कि df['one'] >= df['two']
कब df['one'] < df['two']
गलत है, तो शर्तों और विकल्पों को सरल बनाया जा सकता है
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(इस धारणा अगर सच नहीं हो सकता df['one']
या df['two']
Nans होते हैं।)
ध्यान दें कि
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
स्ट्रिंग मानों के साथ एक DataFrame परिभाषित करता है। चूंकि वे संख्यात्मक दिखते हैं, इसलिए आप उन स्ट्रिंग्स को फ़्लोट में परिवर्तित करना बेहतर हो सकते हैं:
df2 = df.astype(float)
यह परिणाम बदलता है, हालांकि, चूंकि तार चरित्र-दर-वर्ण की तुलना करते हैं, जबकि फ्लोट की तुलना संख्यात्मक रूप से की जाती है।
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
if
कथन है तो मूल्य क्या होना चाहिएFalse
?