【发布时间】:2015-09-15 06:55:40
【问题描述】:
如何向 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.}
我想通过将每个标称值乘以适当的因子来添加一列,我想使用数据框 df 中的第二列 df['year'] 作为键在外部 factors 字典中查找该值
df['real'] = df['nominal'] * factors[df['year']]
或
df['real'] = df.nominal * factors[df.year]
但这两者都会产生错误。我也尝试过
def nominal_to_real(df, nom_col='nominal', year_col='year', factors=factors):
return df[nom_col] * factors[df[year_col]]
df['real] = df.apply(nominal_to_real, axis=1)
产生以下错误
/Users/.../anaconda/lib/python2.7/site-packages/ipykernel/main.py:5: SettingWithCopyWarning:试图在一个副本上设置一个值 从 DataFrame 切片。尝试使用 .loc[row_indexer,col_indexer] = 取而代之的价值
请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
我做错了什么?当然这应该很简单......
提前致谢
【问题讨论】:
标签: python numpy pandas ipython