我想基于其他2列中的条目填充数据框的每一列,特别是我想用该股票的相应股票的相应股票价格和日期填充每一行,例如所以
dict1 = [{'ticker': 'AAPL','date': date(2016, 3, 1),'Price': 'NaN'},
{'ticker': 'MSFT','date': date(2017, 12, 1), 'Price': 'NaN'}]
df1 = pd.DataFrame(dict1)
df1.index=df1['ticker']
df1.loc['AAPL','Price'] = web.DataReader(df1.loc['AAPL','ticker'], 'iex', df1.loc['AAPL','date'], df1.loc['AAPL','date']).close[0]
我正在努力寻找一种通过for循环,应用或映射来自动执行此操作的方法。谁能建议一种方法?
我问了一个类似的问题,“地图”在哪里工作(仅适用于1列),但我不确定如何将其扩展到2个参考列。
Filling a pandas column based on another column
请注意,用于提取名称的函数来自此处:
将pandas_datareader.data导入为网络
答案 0 :(得分:1)
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html
import pandas as pd
from datetime import date
import pandas_datareader.data as web
def lookup_price(row):
return web.DataReader(row['ticker'], 'iex', row['date']).close[0]
def main():
dict1 = [
{'ticker': 'AAPL', 'date': date(2016, 3, 1)},
{'ticker': 'MSFT', 'date': date(2017, 12, 1)},
]
df1 = pd.DataFrame(dict1)
df1['price'] = df1.apply(lookup_price, axis='columns')
print(df1)
if __name__ == '__main__':
main()