Python 使用基于数据框年份的值向数据框添加新列

Python 使用基于数据框年份的值向数据框添加新列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧 import pandas_datareader as webreader import math import numpy as np import pandas as pd from datetime import date, timedelta, datetime from pandas.plotting import register_matplotlib_converters import matplotlib.pyplot as plt import matp

我有一个数据帧

import pandas_datareader as webreader
import math 
import numpy as np 
import pandas as pd 
from datetime import date, timedelta, datetime
from pandas.plotting import register_matplotlib_converters
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates
from sklearn.metrics import mean_absolute_error, mean_squared_error
from keras.models import Sequential 
from keras.layers import LSTM, Dense, Dropout
from keras.callbacks import EarlyStopping
from sklearn.preprocessing import RobustScaler

stockname = 'INFOSYS'
symbol = 'INFY.NS'
df = webreader.DataReader(symbol, start=date_start, end=date_today, data_source="yahoo")
print(df)
产出是,

我想在这个数据框中添加列“deb/eq”,并且我想添加特定于年份的值

例如

for all dates in 2020 - all deb/eq values to be 0.00
for all dates in 2019 - all deb/eq values to be 1.00
for all dates in 2018 and previous - all deb/eq values to be 2.00
如何根据数据帧年份向数据帧添加新列和值?

通过以下方式将设置的不匹配值(
NaN
s)与
2.0
一起使用:

与:

编辑:


df['ATR']=df.index.year.map({2021:91.452020:97.532019:92.622018:81.832017:74.212016:74.222015:76.522014:84.112013:85.442012:87.262011:87.972010:81.102009:95.802008:90.862007:101.252006:99.052005:104.122004:92.67})。fillna(0.0)这给了我错误索引器错误:索引8超出了大小为0的轴的界限8@sam-有可能升级熊猫吗?@sam-我在熊猫1.2.3中进行了测试,效果很好,补充到回答中。对于您的示例数据帧,无错误工作?完成bro@jezrael。谢谢你的帮助
df['deb/eq'] = df.index.year.map({2020:0.0, 2019:1.0}).fillna(2.0)
y = df.index.year
df['deb/eq'] = np.select([y == 2020, y == 2019], [0.0, 1.0], default=2.0)
df = pd.DataFrame(index=pd.date_range('2003', '2021', freq='A'))

df['ATR'] = df.index.year.map({2021:91.45, 2020:97.53, 2019:92.62, 2018:81.83, 2017:74.21, 2016:74.22, 2015:76.52, 2014:84.11, 2013:85.44, 2012:87.26, 2011:87.97, 2010:81.10, 2009:95.80, 2008:90.86, 2007:101.25, 2006:99.05, 2005:104.12, 2004:92.67}).fillna(0.0)
print (df)
               ATR
2003-12-31    0.00
2004-12-31   92.67
2005-12-31  104.12
2006-12-31   99.05
2007-12-31  101.25
2008-12-31   90.86
2009-12-31   95.80
2010-12-31   81.10
2011-12-31   87.97
2012-12-31   87.26
2013-12-31   85.44
2014-12-31   84.11
2015-12-31   76.52
2016-12-31   74.22
2017-12-31   74.21
2018-12-31   81.83
2019-12-31   92.62
2020-12-31   97.53