簡體   English   中英

通過使用另一列中的值來查找字典中的值,將新列添加到Pandas DataFrame

[英]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.

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