根据特定条件,用来自另一个数据帧的数据填充panda数据帧



我有一个名为"optns";具有关于S&P500选项,有3列:"日期"、"最佳报价"、"货币提示"。我创建了一个新的数据帧";价格;它有8列,表示"Money Ticker"的不同值。我想在这个数据框中填入相应日期的"最佳报价"值。我写了一个代码,但它远没有效率,甚至可能是错误的:

for j in range(0,price.shape[0]):
for i in range(0,optns.shape[0]):
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Call OTM 10%'):
price.loc[j,'Call OTM 10%']=optns.loc[i,'best_offer']
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Call OTM 7%'):
price.loc[j,'Call OTM 7%']=optns.loc[i,'best_offer']
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Call OTM 5%'):
price.loc[j,'Call OTM 5%']=optns.loc[i,'best_offer']
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Call ATM'):
price.loc[j,'Call ATM']=optns.loc[i,'best_offer']
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Put ATM'):
price.loc[j,'ATM']=optns.loc[i,'best_offer']
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Put OTM 5%'):
price.loc[j,'Put OTM 5%']=optns.loc[i,'best_offer']
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Put OTM 7%'):
price.loc[j,'Put OTM 7%']=optns.loc[i,'best_offer']
if (price.loc[j,'Date']==optns.loc[i,'Date']) and (optns.loc[i,'Money Ticker']== 'Put OTM 10%'):
price.loc[j,'Put OTM 10%']=optns.loc[i,'best_offer']

我该怎么做?非常感谢。

我相信您要找的是pd.pivot_table。我不确定我是否完全理解你的数据帧,但如果我得到了它,这应该会解决你的问题:

pd.pivot_table(optns, columns="Money Ticker", values="Best Offer", index="Date")

您可以查看链接的文档以了解更多信息。

最新更新