[英]Add a new column to a Pandas DataFrame by using values in another column to lookup values in a dictionary
如何將列添加到Pandas DataFrame,方法是將現有列乘以使用同一DataFrame中第二列的值作為鍵查找的外部字典中的因子?
我有一個pd.DataFrame
數據幀df
大致的形式
code blah... year nominal
0 T.rrr blah... 2012-13 2.08
1 J.rrr blah... 2008-09 1.09
2 1320 blah... 2008-09 1.38
3 1310 blah... 2010-11 1.20
4 1130 blah... 2010-11 1.22
我也有這些factors
作為字典:
factors = {'2008-09': 1.11075, '2010-11': 1.02947, '2012-13': 1.}
我想通過將每個標稱值乘以適當的因子來添加一列,我想在數據幀df
使用第二列df['year']
作為關鍵字在外部factors
字典中查找
df['real'] = df['nominal'] * factors[df['year']]
要么
df['real'] = df.nominal * factors[df.year]
但這兩者都會產生錯誤。 我也嘗試過類似的東西
def nominal_to_real(df, nom_col='nominal', year_col='year', factors=factors):
return df[nom_col] * factors[df[year_col]]
df['real] = df.apply(nominal_to_real, axis=1)
這會產生以下錯誤
/Users/.../anaconda/lib/python2.7/site-packages/ipykernel/ main .py:5:SettingWithCopyWarning:嘗試在DataFrame的切片副本上設置值。 嘗試使用.loc [row_indexer,col_indexer] = value
請參閱文檔中的警告: http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
我究竟做錯了什么? 當然這應該很簡單......
提前致謝
使用Series的map
方法在字典中查找:
df['nominal'] * df['year'].map(factors)
經過一些困惑之后,我可以確認這就是你用一條線做的。 這里的數據包含一列額外的單位; 我正在過濾掉“比率”記錄,我不想使用它們。 關鍵是使用.map
描述的.loc
方法.map
df.loc[df.loc[:,'unit']!='Ratio','real'] = df.loc[df.loc[:,'unit']!='Ratio','nominal'] * df.loc[df.loc[:,'unit']!='Ratio','year'].map(factors)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.