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

私が印刷histし、freqこれが私が得るものである場合:

> 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例外が発生します。

間違っていることがわかりません。「シリーズ」は列ではなくインデックスである可能性があるので、別の方法で行う必要がありますか?

4

1 に答える 1

11

ドキュメントから:

on: 結合する列 (名前)。左と右の両方の DataFrame オブジェクトにある必要があります。渡されず、left_index と right_index が False の場合、DataFrame 内の列の交差が結合キーであると推測されます。

これがドキュメント文字列にない理由はわかりませんが、問題を説明しています。

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

あるいは、より簡単に、あなたが望むことを正確に行うDataFramehasjoinメソッドがあります:

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
于 2012-04-13T19:22:11.420 に答える