如何将一列添加到Pandas DataFrame中,将现有列乘以外部字典中的一个因子,使用同一DataFrame中作为键的第二列中的值查找?
我有一个大致为表单的pd.DataFrame 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.}我希望通过将每个标称值乘以适当的因子来添加一列,我希望使用dataframe factors df中的第二列df['year']作为键在外部df字典中查找该值。
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的片的副本上设置。尝试使用.locrow_indexer,col_indexer = value代替 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
我做错了什么?当然这应该很简单..。
提前感谢
发布于 2015-09-15 07:02:07
使用系列化的map方法在字典中查找:
df['nominal'] * df['year'].map(factors)发布于 2015-09-15 10:04:58
经过一些困惑之后,我可以确定这是用一行来完成的。这里的数据包含一列额外的单位;我正在筛选“比率”记录,我不想使用这些记录。关键是使用.loc方法在此描述和.map
df.loc[df.loc[:,'unit']!='Ratio','real'] = df.loc[df.loc[:,'unit']!='Ratio','nominal'] * df.loc[df.loc[:,'unit']!='Ratio','year'].map(factors)https://stackoverflow.com/questions/32579587
复制相似问题