根据其他2列填充熊猫列

时间:2018-12-20 22:10:49

标签: python pandas apply

我想基于其他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导入为网络

1 个答案:

答案 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()