2012-04-13 2 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"에 의해 색인이있어 : 나는 histfreq를 인쇄 할 경우

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"}) 

이것은 내가 무엇을 얻을 내가 병합하려고하면 있지만 :

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

을 나는 KeyError: 'no item named series' 예외를 얻을. on = "series"을 생략하면 IndexError: list index out of range 예외가 발생합니다.

내가 잘못하고있는 것을 얻지 못합니다. "시리즈"는 인덱스가 아닌 열이므로 다른 방식으로해야합니까? docs에서

답변

11

:에

: 열 (이름)에 가입. 올바른 DataFrame 개체와 왼쪽 및 모두에 있어야합니다. 통과 left_index 및 은 False입니다 right_index되지 않은 경우, DataFrames의 열 교회법 이 (가)이 문서화 문자열에없는 이유를 모르겠어요

키에 가입 것으로 추정됩니다,하지만 설명 너의 문제.

당신은 left_indexright_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 
또는

단순히 더 DataFrame 정확히 수행 join 방법이있다 원하는 내용 :

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

merge docstring을 향상시킬 시간! –

+0

@WesMcKinney : Nice :) – Avaris

관련 문제