首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据匹配的字符串使用另一个df值转换熊猫df列中的值

根据匹配的字符串使用另一个df值转换熊猫df列中的值
EN

Stack Overflow用户
提问于 2017-07-13 14:57:42
回答 2查看 73关注 0票数 2

我对以下几点有困难:

我有第一个Pandas df,其构建方式如下:

代码语言:javascript
复制
index|date|price
0    |2011|1000
1    |2011|1100
2    |2012|1200
3    |2013|1300

日期值是简单的字符串。

另一个国家有每年的通货膨胀率(粗略计算):

代码语言:javascript
复制
date |rate
2011 |0.1 
2012 |0.2 
2013 |0.3 

我的目标是能够使用第二个数据集来转换第一个数据集中的价格值。(用适当的年份价值除以通货膨胀率)

最终结果应该如下所示:

代码语言:javascript
复制
index|date|price
0    |2011|10000
1    |2011|11000
2    |2012|6000
3    |2013|4333

任何帮助都非常感谢。也许解决方案已经存在,但是我很难用google查询来实现它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-13 15:02:02

你可以这样做:

代码语言:javascript
复制
In [90]: df1['price'] /= df1['date'].map(df2.set_index('date')['rate'])

In [91]: df1
Out[91]:
   index  date         price
0      0  2011  10000.000000
1      1  2011  11000.000000
2      2  2012   6000.000000
3      3  2013   4333.333333
票数 4
EN

Stack Overflow用户

发布于 2017-07-13 15:08:47

只是为了突出axislevelpd.DataFrame.div中的使用

代码语言:javascript
复制
df1.set_index(
    'date', append=True
).div(
    df2.set_index('date').rate, axis=0, level=1
).reset_index(1)

       date         price
index                    
0      2011  10000.000000
1      2011  11000.000000
2      2012   6000.000000
3      2013   4333.333333
代码语言:javascript
复制
df1.set_index('date', append=True)

            price
index date       
0     2011   1000
1     2011   1100
2     2012   1200
3     2013   1300

代码语言:javascript
复制
df2.set_index('date').rate

date
2011    0.1
2012    0.2
2013    0.3
Name: rate, dtype: float64

我们可以看到,修改后的df1数据格式索引的第1级与修改后的df2索引中的'data'值相同。我们可以用axislevel参数对齐目标。

尽管如此,对于这个特殊的问题..。我不可能不复制@MaxU!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45084355

复制
相关文章

相似问题

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