我有pandas.DataFrame
这样:
第一列是我为某些东西付出的理论价格,因为我觉得这对我来说是值得的。其他列是其他人在(global_buy_price
)尝试购买的平均价格以及其他人试图在(global_sell_price)
和两者中间出售的平均价格,{ {1}}。
创建名为global_middle_price
的列的最快方法是什么?如果我购买的话会包含I bought
,如果我没有购买则会1
?
我知道我买的方式是:
如果0
是>比my_buy_price
,我有100%的机会购买。
如果global_sell_price
介于my_buy_price
和global_middle_price
之间,那么我购买的概率为80%
如果global_sell_price
介于my_buy_price
和global_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
答案 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