相当于数据框中vlookup的python

时间:2018-08-28 13:55:37

标签: python

我有一个df

df = {'a1': [2, 4, 7, 5, 6],
     'a2': [A, B, C, D, A],
     'a3': [4, 3, 2, 8, 7],
     'x1': [2, 2, 4, 6, 4],
     'x2': [2, 2, 2, 6, 7]}
df = pd.DataFrame(df, index=range(0,5))

和字典:

cost={}
cost['A']=0.2
cost['B']=0.1
cost['C']=0.3
cost['D']=0.5

我希望在我的df中添加一个额外的列“费用”,以使费用列是基于在列a2中找到的相关字母的相对费用。

所需的输出将是这样的df :(如果我手动将其写出来!)

df = {'a1': [2, 4, 7, 5, 6],
     'a2': [A, B, C, D, A],
     'a3': [4, 3, 2, 8, 7],
     'x1': [2, 2, 4, 6, 4],
     'x2': [2, 2, 2, 6, 7],
     'cost': [0.2, 0.1, 0.3, 0.5, 0.2]}

到目前为止,我效率不高的方法是:

df['cost']=df['a2']
for i in range(0,len(df.index),1):
    df['cost'][i]=cost[df['cost'][i]]

有人知道如何做到无循环吗? 谢谢

1 个答案:

答案 0 :(得分:1)

使用您的dfcost

df['cost'] = df['a2'].apply(cost.get)

这可能不会比for循环快得多,也许有更好的方法。 输出:

   a1 a2  a3  x1  x2  cost
0   2  A   4   2   2   0.2
1   4  B   3   2   2   0.1
2   7  C   2   4   2   0.3
3   5  D   8   6   6   0.5
4   6  A   7   4   7   0.2