所以我有一个数据帧对象(bhavcopy),我是通过读取CSV文件创建的。此数据框对象有多种类型,我必须根据一列(仪器)插入到不同的表中。
所以,在下面的代码中,我使用lambda函数从其他数据帧中获取值。(我试图根据futidx数据帧中的'close1'列在optidx数据帧中创建一个新列,与“optidx”数据帧中的“符号”,“Expiry_dt”,“Timestamp1”具有相同的值。
bhavcopy=pd.read_csv(path+bhavcopyfile, parse_dates=['EXPIRY_DT', 'TIMESTAMP'])
print('Processing: '+bhavcopyfile)
if(bhavcopyfile!='fo14MAY2012bhav.csv'):
bhavcopy=bhavcopy.drop('Unnamed: 15', axis=1)
#print(bhavcopy.head())
futidx=bhavcopy[bhavcopy['INSTRUMENT']=='FUTIDX']
futidx=futidx.drop('INSTRUMENT', axis=1)
futidx.columns=['SYMBOL', 'EXPIRY_DT', 'STRIKE_PR', 'OPTION_TYP', 'OPEN1', 'HIGH', 'LOW', 'CLOSE1', 'SETTLE_PR', 'CONTRACTS', 'VAL_INLAKH', 'OPEN_INT', 'CHG_IN_OI', 'TIMESTAMP1']
#futidx.to_sql(con=cnx, name='futidx', if_exists='append', index=False)
optidx=bhavcopy[bhavcopy['INSTRUMENT']=='OPTIDX']
optidx=optidx.drop('INSTRUMENT', axis=1)
optidx.columns=['SYMBOL', 'EXPIRY_DT', 'STRIKE_PR', 'OPTION_TYP', 'OPEN1', 'HIGH', 'LOW', 'CLOSE1', 'SETTLE_PR', 'CONTRACTS', 'VAL_INLAKH', 'OPEN_INT', 'CHG_IN_OI', 'TIMESTAMP1']
optidx['fut_close']=optidx.apply(lambda row: futidx[(futidx['SYMBOL']==row['SYMBOL']) & (futidx['EXPIRY_DT']==row['EXPIRY_DT']) &(futidx['TIMESTAMP1'] ==row['TIMESTAMP1'])].iloc[0], axis=1)
#optidx.apply(lambda row: futidx[(futidx['SYMBOL']==row.SYMBOL) & (futidx['EXPIRY_DT'] == row.EXPIRY_DT) & (futidx['TIMESTAMP1'] ==row.TIMESTAMP1)].iloc[0]['CLOSE1'], axis=1 )
print(optidx.head())
#optidx.to_sql(con=cnx, name='optidx', if_exists='append', index=False)
但是,我不断收到以下错误:
IndexError: ('single positional indexer is out-of-bounds', 'occurred at index 659')
关于如何完成任何工作的任何想法/建议都是最受欢迎的....
以下是文件中的一些示例数据...
INSTRUMENT SYMBOL EXPIRY_DT STRIKE_PR OPTION_TYP OPEN HIGH LOW CLOSE SETTLE_PR CONTRACTS VAL_INLAKH OPEN_INT CHG_IN_OI TIMESTAMP
FUTIDX BANKNIFTY 25-Jan-18 0 XX 25534 25668.3 25520.65 25636.5 25636.5 51965 531887.44 1650200 123080 5-Jan-18
FUTIDX BANKNIFTY 22-Feb-18 0 XX 25616.8 25720 25575 25687.5 25687.5 844 8658.98 80880 4080 5-Jan-18
FUTIDX BANKNIFTY 28-Mar-18 0 XX 25663.8 25767.05 25635 25738.95 25738.95 66 678.38 4200 1280 5-Jan-18
OPTIDX BANKNIFTY 25-Jan-18 25400 CE 388.35 441.2 355.25 418.5 418.5 1065 10988.48 51880 -7280 5-Jan-18
OPTIDX BANKNIFTY 25-Jan-18 25500 CE 318 373.3 293.8 353.85 353.85 9110 94123.35 363760 5320 5-Jan-18
OPTIDX BANKNIFTY 25-Jan-18 25600 CE 263.95 319.2 245.75 296.65 296.65 1945 20133.22 55960 3080 5-Jan-18
OPTIDX BANKNIFTY 25-Jan-18 25400 PE 224.5 238 180.55 190.35 190.35 1738 17805.51 26800 2120 5-Jan-18
OPTIDX BANKNIFTY 25-Jan-18 25500 PE 272.1 279.95 212.25 227.6 227.6 10552 108693.13 424360 28840 5-Jan-18
OPTIDX BANKNIFTY 25-Jan-18 25600 PE 317.7 327.15 252.65 265.95 265.95 1232 12761.12 33200 8560 5-Jan-18
我想在optidx数据帧中添加一个名为fut_close的新列,其值基于futidx数据帧的close1值,其值与symbol,expiry_dt和timestamp1相同。如果没有匹配,我想将其设为零。
谢谢!