2016-07-26 17 views
14

np.where में वेक्टरकृत के अर्थशास्त्र हैं (जैसे अपाचे स्पार्क के when/otherwise डेटाफ्रेम विधि के समान)। मुझे पता है कि मैं np.where का उपयोग पांडा Series पर कर सकता हूं, लेकिन pandas कच्चे numpy कार्यों के बजाय अक्सर अपने स्वयं के एपीआई को परिभाषित करता है, जो आमतौर पर pd.Series/pd.DataFrame के साथ अधिक सुविधाजनक है।pandas np.where

निश्चित रूप से, मुझे pandas.DataFrame.where मिला। हालांकि, पहली नज़र में, यह एक पूरी तरह से अलग अर्थशास्त्र है।

# df is pd.DataFrame 
# how to write this using df.where? 
df['C'] = np.where((df['A']<0) | (df['B']>0), df['A']+df['B'], df['A']/df['B']) 

Am मैं कुछ स्पष्ट याद आ रही: मैं np.where पांडा का उपयोग कर where का सबसे बुनियादी उदाहरण के पुनर्लेखन के लिए एक तरह से नहीं मिल सकता है? या np.where के समान नाम के बावजूद पांडा where एक पूरी तरह से अलग उपयोग केस के लिए है?

+0

डॉकस्ट्रिंग http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html इसे उचित रूप से अच्छी तरह समझाता है (यह सोचकर कि यह एक उदाहरण या दो का उपयोग कर सकता है)। संक्षिप्त विवरण, और 'cond' और' अन्य 'तर्कों का विवरण पर ध्यान दें, लेकिन इन तर्कों के लिए कॉल करने योग्य होने के विकल्प को अनदेखा करें। –

+0

@WarrenWeckesser दस्तावेज़ों के दूसरे पढ़ने पर, मुझे लगता है कि मुझे यह मिला है ... यह कुछ है (डीएफ.ए + डीएफ.बी)। ((डीएफ ['ए'] <0) | (डीएफ [' बी ']> 0), डीएफ.ए/डीएफ.बी)', है ना? मुझे लगता है कि मैं अपने प्रश्न को हटा दूंगा। – max

+3

@max: नहीं हटाएं। यह भविष्य में किसी की मदद करेगा। – bernie

उत्तर

15

प्रयास करें:

(df['A'] + df['B']).where((df['A'] < 0) | (df['B'] > 0), df['A']/df['B']) 

numpywhere और DataFramewhere के बीच अंतर यह है कि मूलभूत मूल्यों DataFrame कि where विधि (docs) पर बुलाया जा रहा है के द्वारा आपूर्ति कर रहे हैं।

आईई।

np.where(m, A, B) 

मोटे तौर पर

A.where(m, B) 

के बराबर है, तो आप पांडा का उपयोग कर एक ऐसी ही कॉल हस्ताक्षर चाहता था, आप the way method calls work in Python का लाभ ले सकता है:

pd.DataFrame.where(cond=(df['A'] < 0) | (df['B'] > 0), self=df['A'] + df['B'], other=df['A']/df['B']) 

या kwargs (नोट के बिना: कि तर्कों का स्थितित्मक क्रम numpywhereargument order से अलग है):

pd.DataFrame.where(df['A'] + df['B'], (df['A'] < 0) | (df['B'] > 0), df['A']/df['B']) 
+1

@piRSquared बस अपने 'groupby' 'agg' प्रश्न/@ unutbu के उत्तर के माध्यम से पढ़ें और वही बात सोच रहा था! – Alex

+0

यदि आप दस्तावेज़ स्ट्रिंग में एक उदाहरण दिखाना चाहते हैं तो यह एक बड़ा योगदान होगा! – Jeff

+0

@ जेफ बस एक पीआर जमा किया। क्या आपके पास उच्च स्तर पर पांडा की स्रोत कोड संरचना को समझने के लिए कोई संसाधन है (उदा। डेवलपर फ़ोरम पर मौजूदा दस्तावेज़/पोस्ट)? मैंने योगदान/विकास दस्तावेज़ों के माध्यम से पढ़ा जो मैंने पाया और स्रोत कोड के इस प्रकार के 5000-फीट दृश्य जैसा कुछ भी नहीं देखा। – Alex

संबंधित मुद्दे