sfo*_*ney 11 python buckets bins pandas
如何在python中使用pd.qut创建新的Bin/Bucket变量?
这对于有经验的用户来说可能看起来很简单,但我对此并不十分清楚,在堆栈溢出/谷歌搜索时出乎意料地不直观.一些彻底的搜索产生了这个(qcut作为新列的分配),但它没有完全回答我的问题,因为它没有采取最后一步并将所有内容放入箱(即1,2,......).
在Pandas 0.15.0或更新版本中,pd.qcut如果输入是一个系列(就像在你的情况下那样)或者如果输入,将返回一个系列而不是一个分类labels=False.如果设置labels=False,则qcut返回一个带有二进制位的整数指示符的系列作为值.
因此,为了使您的代码能够面向未来,您可以使用
data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False)
Run Code Online (Sandbox Code Playgroud)
或者,传递一个NumPy数组,pd.qcut以便获得一个Categorical作为返回值.请注意,labels不推荐使用 Categorical属性.codes改为使用:
data3['bins_spd'] = pd.qcut(data3['spd_pct'].values, 5).codes
Run Code Online (Sandbox Code Playgroud)
编辑:以下答案仅对小于0.15.0的熊猫有效。如果您运行的是Pandas 15或更高版本,请参阅:
data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False)
Run Code Online (Sandbox Code Playgroud)
感谢@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]
Run Code Online (Sandbox Code Playgroud)
这将为您提供与每个观测值相对应的bin端点。但是,如果您希望为每个观测值使用相应的箱号,则可以执行以下操作:
print pd.qcut(data3['spd_pct'],5).labels
[2 1 3 ..., 0 1 4]
Run Code Online (Sandbox Code Playgroud)
如果只想使用bin编号创建一个新变量,将所有内容放在一起,就足够了:
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]
Run Code Online (Sandbox Code Playgroud)
希望这对其他人有帮助。至少现在应该更容易搜索。:)
| 归档时间: |
|
| 查看次数: |
13000 次 |
| 最近记录: |