मैं एक 2 डी हिस्टोग्राम (या अन्य आंकड़े, लेकिन उदाहरण के लिए हिस्टोग्राम लेना चाहता हूं) एक 2 डी डेटा सेट के लिए बनाना चाहता हूं। समस्या यह है कि खाली डिब्बे पूरी तरह से त्याग दिया प्रतीत होता है। उदाहरण के लिए,पांडा समूह समूह की रिपोर्ट खाली डिब्बे
import numpy
import pandas
numpy.random.seed(35)
values = numpy.random.random((2,10000))
xbins = numpy.linspace(0, 1.2, 7)
ybins = numpy.linspace(0, 1, 6)
मैं आसानी से वांछित आउटपुट
print numpy.histogram2d(values[0], values[1], (xbins,ybins))
[[ 408. 373. 405. 411. 400.]
[ 390. 413. 400. 414. 368.]
[ 354. 414. 421. 400. 413.]
[ 426. 393. 407. 416. 412.]
[ 412. 397. 396. 356. 401.]
[ 0. 0. 0. 0. 0.]]
दे रही है हालांकि, पांडा के साथ साथ प्राप्त कर सकते हैं,
df = pandas.DataFrame({'x': values[0], 'y': values[1]})
binned = df.groupby([pandas.cut(df['x'], xbins),
pandas.cut(df['y'], ybins)])
print binned.size().unstack()
प्रिंट
y (0, 0.2] (0.2, 0.4] (0.4, 0.6] (0.6, 0.8] (0.8, 1]
x
(0, 0.2] 408 373 405 411 400
(0.2, 0.4] 390 413 400 414 368
(0.4, 0.6] 354 414 421 400 413
(0.6, 0.8] 426 393 407 416 412
(0.8, 1] 412 397 396 356 401
यानी, 1 < x <= 1.2
के साथ अंतिम पंक्ति, पूरी तरह गायब है, क्योंकि इसमें कोई मूल्य नहीं है। हालांकि मैं इसे स्पष्ट रूप से देखना चाहता हूं (जैसे numpy.histogram2d
का उपयोग करते समय)। इस उदाहरण में मैं numpy का उपयोग ठीक कर सकता हूं लेकिन अधिक जटिल सेटिंग्स (एन-आयामी कताई, या गणना के अलावा अन्य आंकड़ों की गणना आदि) पर, pandas
कोड के लिए और अधिक कुशल हो सकता है और numpy
से गणना करने के लिए।
सिद्धांत रूप में मैं तरीके अगर एक सूचकांक मौजूद है की जाँच करने के साथ की तरह
allkeys = [('({0}, {1}]'.format(xbins[i-1], xbins[i]),
'({0}, {1}]'.format(ybins[j-1], ybins[j]))
for j in xrange(1, len(ybins))
for i in xrange(1, len(xbins))]
आ सकता है, कुछ का उपयोग कर हालांकि, समस्या यह है कि सूचकांक स्वरूपण, संगत नहीं है अर्थ में है कि, आप के रूप में ऊपर देखें, binned
की पहली अनुक्रमणिका ['(0, 0.2]', '(0, 0.2]']
है लेकिन allkeys
में पहली प्रविष्टि ['(0.0, 0.2]', '(0.0, 0.2]']
है, इसलिए मैं allkeys
से binned.viewkeys()
से मेल नहीं खा सकता।
किसी भी मदद की बहुत सराहना की जाती है।
'.size तरह लग रहा है()' लापता मूल्यों पर ध्यान नहीं देता। 'गिनती') का उपयोग करने के लिए एक कामकाज हो सकता है जो इस मामले में 'binned' groupby ऑब्जेक्ट पर लागू होने पर अनुपलब्ध मानों को रखने के लिए प्रतीत होता है: 'binned.count() [' x ']। Unstack()। Fillna (0) '। –
ऐसा लगता है कि व्यवहार 'पांडा' 'v0.16' (मेरे काम कंप्यूटर में उपलब्ध) के बाद बदल सकता है। यदि मैं 'binned.count() चलाता हूं, तो मुझे' ValueError मिलता है: NA को पूर्णांक में परिवर्तित नहीं किया जा सकता है। हालांकि मेरे लैपटॉप में ('v0.17.1' के साथ) 'गिनती()' ठीक काम करता है। –
यह अनुमान है, लेकिन यदि आप 'binned.agg (lambda x: 1.0 * x.count()) करते हैं तो क्या होता है। Unstack()'? इसे फ्लोट वापस करना चाहिए, इसलिए उम्मीद है कि नैन को परिवर्तित नहीं किया जाएगा। – ptrj