【发布时间】:2021-06-27 10:02:33
【问题描述】:
import requests
import pandas as pd
import numpy
def get_token(instrument):
response = requests.get("https://api.kite.trade/instruments")
var1 = response.content.decode('ISO-8859-1')
df = pd.DataFrame([x.split(',') for x in var1.split('\n')])
df =df.rename(columns=df.iloc[0]).drop(df.index[0])
mask = df['segment'].isin(['NFO-FUT', 'NFO-OPT'])
df_filtered = df[mask]
if (instrument.lower() == "future"):
df = df_filtered.loc[df_filtered['segment'] == 'NFO-FUT']
else:
df = df_filtered.loc[df_filtered['segment'] == 'NFO-OPT']
df = df.drop(['tick_size', 'last_price'], axis = 1)
return df.replace('"','', regex=True)
df = get_token("Option")
# print(df)
def get_bhavcopy(date):
date = date.replace("-","")
try:
payload=pd.read_csv("https://archives.nseindia.com/products/content/sec_bhavdata_full_"+date+".csv", skipinitialspace = True)
except Exception as e:
print(e)
return payload
pd.set_option('max_column', None)
price_data= get_bhavcopy("25-06-2021")
mask = price_data['SERIES'].isin(['EQ'])
price_data = price_data[mask]
df_np = df['name'].unique()
data = pd.DataFrame(columns=['name','close'])
我正在尝试获得 ATM 罢工,以及 ATM 上方和下方的 5 次罢工。
我在这里做的是
- 从 NSE 获取每个符号的价格
- 获取所有 F&O 的罢工名单
并打算通过使行使价最接近每个交易品种的最后收盘价来找到 ATM 行使价。
因此我需要比较 df_np (一个 np 数组)和 price_data (dataFrame)中的“SYMBOL”列中的每个值以获得最后的价格,以便我可以使用它从 df
找到 ATM 罢工我不知道该怎么做!或者如果有任何更好的方法可以实现我的目标,即在特定日期为某个交易品种找到 ATM 价格上下 10 次罢工。
【问题讨论】:
-
符号在
price_data数据框中不是唯一的,如何选择给定符号的最后价格? -
符号是唯一的,因为我是从 NSE 网站本身获取的,并且在给定日期内不能有两个同名的符号。
-
我运行了你的代码,在很多情况下,相同的 SYMBOL 在 2021 年 6 月 25 日多次出现,但 SERIES 不同。尝试运行
price_data['SYMBOL'].value_counts()。 -
感谢您指出,我错过了它,因为我只是在 excel 中执行了“删除重复项”,它显示“未找到重复项”(可能是我选择了错误的列)。我现在通过根据我的要求过滤它来删除重复项。 @joao
标签: python-3.x pandas dataframe numpy-ndarray