2015-02-10 24 views
10

कैसे आप एक नया बिन/बाल्टी अजगर में pd.qut का उपयोग कर चर बना सकता हूँ के साथ बाल्टी वेरिएबल बनाएं /?अजगर पांडा नई बिन pd.qcut

इस अनुभवी उपयोगकर्ताओं के लिए प्राथमिक लग सकता है, लेकिन मैं सुपर इस पर स्पष्ट नहीं था और यह आश्चर्यजनक रूप से ढेर अतिप्रवाह/गूगल पर खोज करने के लिए unintuitive था। कुछ पूरी तरह से खोज ने यह पाया (Assignment of qcut as new column) लेकिन इसने मेरे प्रश्न का काफी जवाब नहीं दिया क्योंकि यह आखिरी कदम नहीं उठाया और सब कुछ डिब्बे में डाल दिया (यानी 1,2, ...)।

उत्तर

3

संपादित करें: नीचे इस सवाल का जवाब 0.15.0 से कम पांडा के संस्करणों के लिए ही मान्य है। यदि आप पांडस 15 या उच्चतर चल रहे हैं, तो देखें:

data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False) 

@unutbu को इंगित करने के लिए धन्यवाद। :)

कहो आप कुछ डेटा है कि आप मेरे मामले विकल्पों फैलता में बिन करना चाहते हैं, है, और आप बाल्टी प्रत्येक अवलोकन करने के लिए इसी के साथ एक नया चर बनाना चाहते हैं। लिंक है कि ऊपर उल्लेख किया है आप ऐसा कर सकते हैं:

print pd.qcut(data3['spd_pct'], 40) 

(0.087, 0.146] 
(0.0548, 0.087] 
(0.146, 0.5] 
(0.146, 0.5] 
(0.087, 0.146] 
(0.0548, 0.087] 
(0.5, 2] 

जो आप देता है क्या बिन अंतिमबिंदुओं कि प्रत्येक अवलोकन के अनुरूप हैं। हालांकि, अगर आप प्रत्येक अवलोकन के लिए इसी बिन संख्या चाहते हैं तो आप ऐसा कर सकते हैं:

print pd.qcut(data3['spd_pct'],5).labels 

[2 1 3 ..., 0 1 4] 

यह सबको एक साथ रखें अगर आप सिर्फ बिन संख्या के साथ एक नया चर बनाने के लिए चाहते हैं, यह पर्याप्त होना चाहिए:

data3['bins_spd']=pd.qcut(data3['spd_pct'],5).labels 

print data3.head() 

    secid  date symbol symbol_flag  exdate last_date cp_flag 0 5005 1/2/1997 099F2.37   0 1/18/1997   NaN  P 
1 5005 1/2/1997 09B0B.1B   0 2/22/1997 12/3/1996  P 
2 5005 1/2/1997 09B7C.2F   0 2/22/1997 12/11/1996  P 
3 5005 1/2/1997 09EE6.6E   0 1/18/1997 12/27/1996  C 
4 5005 1/2/1997 09F2F.CE   0 8/16/1997   NaN  P 

    strike_price best_bid best_offer  ...  close volume_y return 0   7500  2.875  3.2500  ...  4.5  99200 0.074627 
1   10000  5.375  5.7500  ...  4.5  99200 0.074627 
2   5000  0.625  0.8750  ...  4.5  99200 0.074627 
3   5000  0.125  0.1875  ...  4.5  99200 0.074627 
4   7500  3.000  3.3750  ...  4.5  99200 0.074627 

    cfadj_y open cfret shrout  mid spd_pct bins_spd 
0  1 4.5  1 57735 3.06250 0.122449   2 
1  1 4.5  1 57735 5.56250 0.067416   1 
2  1 4.5  1 57735 0.75000 0.333333   3 
3  1 4.5  1 57735 0.15625 0.400000   3 
4  1 4.5  1 57735 3.18750 0.117647   2 

[5 rows x 35 columns] 

आशा इस मदद करता है किसी और को। कम से कम अब खोजना आसान होना चाहिए। :)

7

पांडस 0.15.0 या नए, pd.qcut में एक श्रृंखला वापस आ जाएगी, अगर इनपुट एक श्रृंखला है (जैसा कि आपके मामले में है) या labels=False। यदि आप labels=False सेट करते हैं, तो qcut डिब्बे के पूर्णांक संकेतकों के साथ मानों के रूप में एक श्रृंखला वापस कर देगा।

तो अपने कोड भविष्य प्रूफ करने के लिए, आप

data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False) 

का उपयोग करें या है, तो आप वापसी मान के रूप में एक स्पष्ट मिल pd.qcut करने के लिए एक NumPy सरणी दे सकते हैं। ध्यान दें कि स्पष्ट विशेषता labels is deprecated। इसके बजाय codes का उपयोग करें:

data3['bins_spd'] = pd.qcut(data3['spd_pct'].values, 5).codes 
+0

बढ़िया! मुझे इस बारे में पता नहीं था। यह इंगित करने के लिए धन्यवाद। – sfortney

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