12

Pythonでpd.qutを使用して新しいビン/バケット変数を作成するにはどうすればよいですか?

これは経験豊富なユーザーにとっては初歩的なことのように思えるかもしれませんが、私はこれについてあまり明確ではなく、スタック オーバーフロー/Google で検索するのは驚くほど直感的ではありませんでした。いくつかの徹底的な検索でこれが得られましたが(qcutを新しい列として割り当て)、最後のステップを実行せず、すべてをビン(つまり1、2、...)に入れなかったため、私の質問には完全には答えませんでした。

4

2 に答える 2

8

Pandas 0.15.0 以降でpd.qcutは、入力がシリーズ (この場合はそのまま) の場合、または の場合、カテゴリではなくシリーズを返しますlabels=False。を設定するとlabels=Falseqcutビンの整数インジケータを値として持つシリーズが返されます。

したがって、コードを将来的に保証するために、次を使用できます

data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False)

または、NumPy 配列を渡してpd.qcut、戻り値として Categorical を取得します。カテゴリ属性labelsは非推奨であることに注意してください。codes代わりに使用してください:

data3['bins_spd'] = pd.qcut(data3['spd_pct'].values, 5).codes
于 2015-02-10T22:56:31.537 に答える
5

編集: 以下の回答は、0.15.0 未満のバージョンの Pandas でのみ有効です。Pandas 15 以降を実行している場合は、次を参照してください。

data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False)

指摘してくれた@unutbuに感謝します。:)

ビンに入れたいデータがあり、私の場合はオプションが広がり、各観測に対応するバケットで新しい変数を作成したいとします。上記のリンクでこれを行うことができます:

print pd.qcut(data3['spd_pct'], 40)

(0.087, 0.146]
(0.0548, 0.087]
(0.146, 0.5]
(0.146, 0.5]
(0.087, 0.146]
(0.0548, 0.087]
(0.5, 2]

これにより、各観測に対応するビンのエンドポイントが何であるかがわかります。ただし、観測ごとに対応するビン番号が必要な場合は、次のようにすることができます。

print pd.qcut(data3['spd_pct'],5).labels

[2 1 3 ..., 0 1 4] 

ビン番号だけで新しい変数を作成したい場合は、すべてをまとめると、これで十分です。

data3['bins_spd']=pd.qcut(data3['spd_pct'],5).labels

print data3.head()

   secid      date    symbol  symbol_flag     exdate   last_date cp_flag  0   5005  1/2/1997  099F2.37            0  1/18/1997         NaN       P   
1   5005  1/2/1997  09B0B.1B            0  2/22/1997   12/3/1996       P   
2   5005  1/2/1997  09B7C.2F            0  2/22/1997  12/11/1996       P   
3   5005  1/2/1997  09EE6.6E            0  1/18/1997  12/27/1996       C   
4   5005  1/2/1997  09F2F.CE            0  8/16/1997         NaN       P   

   strike_price  best_bid  best_offer     ...      close  volume_y    return  0          7500     2.875      3.2500     ...        4.5     99200  0.074627   
1         10000     5.375      5.7500     ...        4.5     99200  0.074627   
2          5000     0.625      0.8750     ...        4.5     99200  0.074627   
3          5000     0.125      0.1875     ...        4.5     99200  0.074627   
4          7500     3.000      3.3750     ...        4.5     99200  0.074627   

   cfadj_y  open  cfret  shrout      mid   spd_pct  bins_spd  
0        1   4.5      1   57735  3.06250  0.122449         2  
1        1   4.5      1   57735  5.56250  0.067416         1  
2        1   4.5      1   57735  0.75000  0.333333         3  
3        1   4.5      1   57735  0.15625  0.400000         3  
4        1   4.5      1   57735  3.18750  0.117647         2  

[5 rows x 35 columns]

これが他の誰かに役立つことを願っています。少なくとも今は検索しやすくなっているはずです。:)

于 2015-02-10T22:20:23.780 に答える