首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用另一列中的值在字典中查找值,从而向Pandas DataFrame添加新列

使用另一列中的值在字典中查找值,从而向Pandas DataFrame添加新列
EN

Stack Overflow用户
提问于 2015-09-15 06:55:40
回答 2查看 2.9K关注 0票数 1

如何将一列添加到Pandas DataFrame中,将现有列乘以外部字典中的一个因子,使用同一DataFrame中作为键的第二列中的值查找?

我有一个大致为表单的pd.DataFrame dataframe df

代码语言:javascript
复制
    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作为字典:

代码语言:javascript
复制
factors = {'2008-09': 1.11075, '2010-11': 1.02947, '2012-13': 1.}

我希望通过将每个标称值乘以适当的因子来添加一列,我希望使用dataframe factors df中的第二列df['year']作为键在外部df字典中查找该值。

代码语言:javascript
复制
df['real'] = df['nominal'] * factors[df['year']]

代码语言:javascript
复制
df['real'] = df.nominal * factors[df.year]

但这两者都会产生错误。我也尝试过

代码语言:javascript
复制
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

我做错了什么?当然这应该很简单..。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2015-09-15 07:02:07

使用系列化的map方法在字典中查找:

代码语言:javascript
复制
df['nominal'] * df['year'].map(factors)
票数 4
EN

Stack Overflow用户

发布于 2015-09-15 10:04:58

经过一些困惑之后,我可以确定这是用一行来完成的。这里的数据包含一列额外的单位;我正在筛选“比率”记录,我不想使用这些记录。关键是使用.loc方法在此描述.map

代码语言:javascript
复制
df.loc[df.loc[:,'unit']!='Ratio','real'] = df.loc[df.loc[:,'unit']!='Ratio','nominal'] * df.loc[df.loc[:,'unit']!='Ratio','year'].map(factors)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32579587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档