1

目標: 次のように、ラベルで構成されるデータフレームに列を追加します。

(-10,5]=-2

(-5,0]= -1

[0,5)  = 0

[5,10)=  1

[10,15)= 2

....等

df.ptdeltaの間にある場合、(-10,5]の列に -2 が加算されますdf

試行 1:

df=pd.read_csv("___.csv",names="a b c d e f".split())
df.set_index(["a", "b"], inplace=True)
d=df["d"]<5 
u=df["d"]>=0

p=df["d"][d & u]

これはインスタンスを見つけられないようです:Series([], dtype=object)

しかし実際には、df["d"]この範囲内に倍精度があります。

試行 2:

zero=[x for x in df["d"] if (0<=df["d"]) & (df["d"]<5)]

結果は次のとおりです。

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

これらのいずれかが失敗するのはなぜですか? どうもありがとう。

df.head() gives: 

        price   ptdelta     II  pl
date    time                
date    time    price   ptdelta II  pl
1/5/2009    930     842     0   -   0
            1620    845.2   3.2     -   6.6
1/6/2009    930     851.8   6.6     -      -3.6
            1620    848.2   -3.6    -   -13
4

1 に答える 1

0

データをビニングし、ビンごとにラベル付けしています。幸いなことに、numpy.digitizeそれを行うことができます。

bins = [-10, -5, 0, 5, 10, 15]
labels = np.digitize(data, bins) - 3

例:

In[1]: df = DataFrame({'d': np.random.randint(-20, 20, 100)})

In[2]: bins = [-10, -5, 0, 5, 10, 15]

In[3]: df['labels'] = np.digitize(df['d'], bins) - 3

In[4]: df.head()
Out[4]:
   d  labels
0 -8      -2
1  4       0
2 -7      -2
3 -3      -1
4  5       1

これらのビンは [-10, 5) のように左側が閉じています。あなたが指定したビンは一貫していないと思います。(0 を -1 または 0 とラベル付けする必要がありますか?) とにかく、エッジ ケースが重要な場合は、その他のオプションについてドキュメントを参照してください。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html

-10 未満または 15 を超えるデータ ポイントには、それぞれ -3 と 3 のラベルが付けられます。必要に応じてそれらを破棄できます。

于 2013-03-15T20:00:10.847 に答える