如何将列添加到Pandas DataFrame中,方法是将现有列乘以使用同一DataFrame中第二列的值作为键查找的外部字典中的因子?
我的pd.DataFrame
数据框df
大致为
code blah... year nominal
0 T.rrr blah... 2012-13 2.08
1 J.rrr blah... 2008-09 1.09
2 1320 blah... 2008-09 1.38
3 1310 blah... 2010-11 1.20
4 1130 blah... 2010-11 1.22
我也将这些factors
作为字典:
factors = {'2008-09': 1.11075, '2010-11': 1.02947, '2012-13': 1.}
我想通过将每个名义值乘以适当的因子来添加列,我想在外部factors
词典中使用数据框{{1}中的第二列df['year']
查找该列}作为关键
df
或
df['real'] = df['nominal'] * factors[df['year']]
但这两者都会产生错误。我也试过像
这样的东西df['real'] = df.nominal * factors[df.year]
产生以下错误
/用户/.../安纳康达/ LIB / python2.7 /站点包/ ipykernel / 主要的.py:5: SettingWithCopyWarning:尝试在a的副本上设置值 从DataFrame切片。尝试使用.loc [row_indexer,col_indexer] = 代替值
请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
我做错了什么?当然这应该很简单......
提前致谢
答案 0 :(得分:3)
使用系列的map
方法在字典中查找:
df['nominal'] * df['year'].map(factors)
答案 1 :(得分:0)
经过一番困惑之后,我可以确认这就是你用一条线做到的。这里的数据包含一列额外的单位;我正在过滤掉“比率”记录,我不想使用它们。关键是将.loc
方法described here与.map
df.loc[df.loc[:,'unit']!='Ratio','real'] = df.loc[df.loc[:,'unit']!='Ratio','nominal'] * df.loc[df.loc[:,'unit']!='Ratio','year'].map(factors)