2012-04-13 6 views
9

私はマージで何か問題があり、それが何であるか理解できません。私は、整数値の一連のヒストグラムを推定するために次のことをやった:パンダ:マージのしくみの理解

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

私はhistfreqを印刷する場合、これは私が得るものです:

> 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"でインデックス化していますしかし、私がマージしようとすると:

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

私はKeyError: 'no item named series'例外が発生します。 on = "series"を省略すると、IndexError: list index out of rangeの例外が発生します。

私が間違っていることはありません。 "シリーズ"はインデックスであり、列ではないので、私はそれを違うようにする必要がありますか?

答えて

11

docsから:

上:列(名前)に参加します。右側のDataFrameオブジェクトと の両方のDataFrameオブジェクトに存在する必要があります。渡されたとleft_indexと がFalseのright_indexない場合は、データフレームの列の交点が、これはドキュメント文字列ではない理由を私は知りませんが、それは説明して、結合キー

する を推測されますあなたの問題。

あなたが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

マージするdocstringを改善する時間! –

+0

@WesMcKinney:Nice :) – Avaris

関連する問題