2012-04-13 11 views
9

मैं विलय के साथ कुछ गलत कर रहा हूं और मैं समझ नहीं पा रहा हूं कि यह क्या है। मैं पूर्णांक मूल्यों की एक श्रृंखला के एक हिस्टोग्राम अनुमान लगाने के लिए निम्नलिखित किया है:पांडा: समझने में परेशानी कैसे काम करती है

> print hist 
     count 
series  
0   2 
1   4 
2   13 
3   15 
4   12 
5   16 
6   18 
7   7 
8   8 
9   3 
10   1 
11   1 

> print freq 
     freq 
series  
0  0.02 
1  0.04 
2  0.13 
3  0.15 
4  0.12 
5  0.16 
6  0.18 
7  0.07 
8  0.08 
9  0.03 
10  0.01 
11  0.01 

वे दोनों "series" द्वारा अनुक्रमित रहे हैं:

import pandas as pnd 
import numpy as np 

series = pnd.Series(np.random.poisson(5, size = 100)) 
tmp = {"series" : series, "count" : np.ones(len(series))} 
hist = pnd.DataFrame(tmp).groupby("series").sum() 
freq = (hist/hist.sum()).rename(columns = {"count" : "freq"}) 

अगर मैं hist और freq प्रिंट इस मैं क्या मिलता है लेकिन अगर मैं विलय करने के लिए प्रयास करें:

> df = pnd.merge(freq, hist, on = "series") 

मैं एक KeyError: 'no item named series' अपवाद मिलता है। अगर मैं on = "series" छोड़ देता हूं तो मुझे IndexError: list index out of range अपवाद मिलता है।

मुझे वह नहीं मिला जो मैं गलत कर रहा हूं। हो सकता है कि "सीरीज़" एक इंडेक्स हो और कॉलम न हो तो मुझे इसे अलग-अलग करना चाहिए?

उत्तर

11

docs से:

पर

: कॉलम (नाम) पर शामिल होने के लिए। बाएं और दोनों डेटाफ्रेम ऑब्जेक्ट्स में पाया जाना चाहिए। पारित नहीं हैं और left_index और right_index झूठी हैं, DataFrames में स्तंभों के चौराहे कुंजी में शामिल होने

मैं क्यों इस docstring में नहीं है पता नहीं है होना करने के लिए लगाए गए अनुमान हो जाएगा, लेकिन यह बताते हैं तुम्हारी समस्या।

आप दे सकते हैं या तो left_index और right_index:

In : pnd.merge(freq, hist, right_index=True, left_index=True) 
Out: 
     freq count 
series 
0  0.01  1 
1  0.04  4 
2  0.14  14 
3  0.12  12 
4  0.21  21 
5  0.14  14 
6  0.17  17 
7  0.07  7 
8  0.05  5 
9  0.01  1 
10  0.01  1 
11  0.03  3 

या फिर आप अपने सूचकांक एक स्तंभ बना सकते हैं और प्रयोग on:

In : freq2 = freq.reset_index() 

In : hist2 = hist.reset_index() 

In : pnd.merge(freq2, hist2, on='series') 
Out: 
    series freq count 
0  0 0.01  1 
1  1 0.04  4 
2  2 0.14  14 
3  3 0.12  12 
4  4 0.21  21 
5  5 0.14  14 
6  6 0.17  17 
7  7 0.07  7 
8  8 0.05  5 
9  9 0.01  1 
10  10 0.01  1 
11  11 0.03  3 

वैकल्पिक रूप से और आसानी से अधिक, DataFramejoin विधि है जो वास्तव में करता है आप क्या चाहते हैं:

In : freq.join(hist) 
Out: 
     freq count 
series 
0  0.01  1 
1  0.04  4 
2  0.14  14 
3  0.12  12 
4  0.21  21 
5  0.14  14 
6  0.17  17 
7  0.07  7 
8  0.05  5 
9  0.01  1 
10  0.01  1 
11  0.03  3 
+1

विलय डॉकस्ट्रिंग में सुधार करने का समय! –

+0

@WesMcKinney: अच्छा :) – Avaris

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