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

2024-05-23 15:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在以下方面遇到困难:

我有第一个熊猫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查询来获得它。。你知道吗


Tags: 数据字符串目标dfdateindexrategoogle
2条回答

只是强调axislevel^{}中的用法

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

df1.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'值相同。我们可以用axislevel参数来确定对齐。你知道吗

也就是说,对于这个特定的问题。。。我不可能不抄@MaxU!你知道吗

你可以这样做:

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

相关问题 更多 >