我对以下几点有困难:
我有第一个Pandas df,其构建方式如下:
index|date|price
0 |2011|1000
1 |2011|1100
2 |2012|1200
3 |2013|1300日期值是简单的字符串。
另一个国家有每年的通货膨胀率(粗略计算):
date |rate
2011 |0.1
2012 |0.2
2013 |0.3 我的目标是能够使用第二个数据集来转换第一个数据集中的价格值。(用适当的年份价值除以通货膨胀率)
最终结果应该如下所示:
index|date|price
0 |2011|10000
1 |2011|11000
2 |2012|6000
3 |2013|4333任何帮助都非常感谢。也许解决方案已经存在,但是我很难用google查询来实现它。
发布于 2017-07-13 15:02:02
你可以这样做:
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发布于 2017-07-13 15:08:47
只是为了突出axis和level在pd.DataFrame.div中的使用
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.333333df1.set_index('date', append=True)
price
index date
0 2011 1000
1 2011 1100
2 2012 1200
3 2013 1300和
df2.set_index('date').rate
date
2011 0.1
2012 0.2
2013 0.3
Name: rate, dtype: float64我们可以看到,修改后的df1数据格式索引的第1级与修改后的df2索引中的'data'值相同。我们可以用axis和level参数对齐目标。
尽管如此,对于这个特殊的问题..。我不可能不复制@MaxU!
https://stackoverflow.com/questions/45084355
复制相似问题