簡體   English   中英

根據匹配的字符串,使用另一個df的值轉換pandas df列中的值

[英]convert values in a pandas df column using another df's value depending on matching strings

我在以下方面遇到困難:

我有第一個以以下方式構建的Pandas df:

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

日期值是簡單的字符串。

另一個df列出了每年的通貨膨脹率(粗略計算):

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查詢來解決這個問題。

您可以這樣操作:

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

只是為了突出pd.DataFrame.div axislevelpd.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.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!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM