标记行的最快方法,其中一列位于其他几列的值之间

时间:2018-02-01 04:46:56

标签: python-3.x pandas numpy

我有pandas.DataFrame这样:

enter image description here

第一列是我为某些东西付出的理论价格,因为我觉得这对我来说是值得的。其他列是其他人在(global_buy_price)尝试购买的平均价格以及其他人试图在(global_sell_price)和两者中间出售的平均价格,{ {1}}。

创建名为global_middle_price的列的最快方法是什么?如果我购买的话会包含I bought,如果我没有购买则会1

我知道我买的方式是:

  • 如果0是>比my_buy_price,我有100%的机会购买。

  • 如果global_sell_price介于my_buy_priceglobal_middle_price之间,那么我购买的概率为80%

  • 如果global_sell_price介于my_buy_priceglobal_buy_price之间,那么我购买的可能性为20%

  • 如果global_middle_price低于my_buy_price,那么我购买的概率为0%

我目前这样做的方法是编写if-elif-elif-elif函数,然后使用global_buy_price创建pandas apply列,这非常慢,因为我有1,000,000行。有没有更快/更正确的方法呢?

这是生成相同I bought的代码:

pandas.DataFrame

1 个答案:

答案 0 :(得分:1)

由于您提及between,我将创建一个新的df并使用idxmax

N=(df['my_buy_price']>df['global_sell_price']).to_frame('100%')
N['80%']=df['my_buy_price'].between(df['global_middle_price'],df['global_sell_price'])
N['20%']=df['my_buy_price'].between(df['global_buy_price'],df['global_middle_price'])
N['0%']=df['my_buy_price']<df['global_buy_price']
N.idxmax(1)
Out[279]: 
0      0%
1     80%
2     20%
3     80%
4     80%
5     20%
6    100%
7     80%
8     80%
9     20%
dtype: object