Python 3.x 如何避免使用for循环为数据帧创建有条件的新列?

Python 3.x 如何避免使用for循环为数据帧创建有条件的新列?,python-3.x,pandas,dataframe,quantitative-finance,Python 3.x,Pandas,Dataframe,Quantitative Finance,我有以下数据,我想创建另一个名为df['trade\u percentage']的列,其中,如果df['trade']=“ask”,df['trade\u percentage']=df['trade\u size']/df['ask\u size']或者如果df['trade']=“bid”,df['trade\u percentage']=df['trade\u size']/df['bid\u size']。别理南。我写了以下代码: 然而,我的数据帧中有一百万行,这已经运行了几个小时,并且

我有以下数据,我想创建另一个名为df['trade\u percentage']的列,其中,如果df['trade']=“ask”,df['trade\u percentage']=df['trade\u size']/df['ask\u size']或者如果df['trade']=“bid”,df['trade\u percentage']=df['trade\u size']/df['bid\u size']。别理南。我写了以下代码:

然而,我的数据帧中有一百万行,这已经运行了几个小时,并且仍然在运行。请问有没有什么方法可以简化它而不是使用循环?谢谢大家!

for i in range(len(df)):
  if (df['trade'][i] == "ask"):
    df['trade_percentage'][i] = df['trade_size'][i]/df['ask_size'][i]
  elif (df['trade'][i] == "bid"):
    df['trade_percentage'][i] = df['trade_size'][i]/df['bid_size'][i]  
df.head()

我正在使用
np。请选择

s1=df['trade'] == "ask"
s2=df['trade'] == "bid"
np.select([s1,s2],[df['trade_size']/df['ask_size'],df['trade_size']/df['bid_size']],default =np.nan)

它们将合并到一个数据帧中,还是我将有两个单独的df,其中一个用于bid,一个用于ask?@atjw94它将返回到一个数组中,检查示例
s1=df['trade'] == "ask"
s2=df['trade'] == "bid"
np.select([s1,s2],[df['trade_size']/df['ask_size'],df['trade_size']/df['bid_size']],default =np.nan)