![](/img/trans.png)
[英]pandas: populate df column with values matching index and column in another 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
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.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'
值相同。 我們可以使用axis
和level
參數來定位對齊。
就是說,對於這個特定的問題……我絕對不會復制@MaxU!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.