根据某些条件在熊猫中计算新列

时间:2019-05-28 15:33:17

标签: python pandas

我正在尝试根据某些值将两个df乘以倍数。

data = {'a':10,'b':20,'c':30} . 

df1:

id,tag,factor
1,a ,20 
2,b ,22 
3,c ,25 

我的最终结果应如下所示:

id,factor,calc  
1,20,200
2,22,440
3,24,750

我尝试过的步骤却给出了错误。

  

df ['calc'] = df ['factor'] * data.get(df ['tag'])

5 个答案:

答案 0 :(得分:1)

以您的情况

df1['calc']=df1.factor*df1.tag.map(data)

或者做一些不同的事情

df['calc']=df.factor*np.vectorize(data.get)(df.tag)#pd.Series(data).get(df.tag).values

答案 1 :(得分:1)

df1['calc']=df1.factor*df1.tag.map(data)

df1.tag.map(data)检查data字典值,并用关联的键替换它们,从而为您提供一个可以乘以df1.factor

的新系列。

答案 2 :(得分:1)

您可以使用pandas.Series.mappandas.DataFrame.drop

df['calc'] = df['factor'] * df['tag'].map(data)
df.drop('tag', axis=1, inplace=True)

输出:

   id  factor  calc
0   1      20   200
1   2      22   440
2   3      25   750

答案 3 :(得分:1)

df['calc'] = df['factor'] * pd.Series([data[key] for key in df["tag"]])

输出

   id  factor  calc
0   1      20   200
1   2      22   440
2   3      25   750

答案 4 :(得分:1)

使用列表理解

df1['calc'] = [x.factor * data[x.tag] for i, x in df1.iterrows()]

输出为

   id tag  factor  calc
0   1   a      20   200
1   2   b      22   440
2   3   c      25   750