我有一个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]]
有人知道如何做到无循环吗? 谢谢
答案 0 :(得分:1)
使用您的df
和cost
。
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