Pandas将计算的向量添加到df

时间:2018-01-22 17:40:28

标签: python pandas vector

我的目标是将基于公式的向量添加到我的以下df:

Day Name a b 1 2 x1 x2  
1   ijk  1 2 3 3  0 1
2   mno  2 1 1 3  1 1

结果:

Day Name a b 1 2 x1 x2  y1      y2     z1                z2  
1   ijk  1 2 3 3  0 1 (1*2)+3 (1*2)+3 (1+2)*(3*1+0*1)  (1+2)*(3*2+1*2)
2   mno  2 1 1 3  1 1 (2*1)+1 (2*1)+3 (2+1)*(1*1+1*1)  (2+1)*(3*2+1*2)

这是我繁琐的方法:

df[y1] = df[a]*df[b]+df[1]  #This is y1 = a*b+value of column 1
df[y2] = df[a]*df[b]+df[2]  #This is y2 = a*b+value of column 2

如果在那时添加了第3列和第3列:y3将是第3列的y3 = a * b +值,

如果在第4列和第4列中加入:y4 = a * b +第4列的值,依此类推......

df[z1] = (df[a]+df[b])*(df[1]*1+df[x1]*1) The "1" here is from the column name 1 and x1  #z1 = (a+b)*[(value of column 1)*1+(value of column x1)*1]
df[z2] = (df[a]+df[b])*(df[1]*2+df[x1]*2) The "2" here is from the column name 2 and x2  #z2 = (a+b)*[(value of column 2)*2+(value of column x2)*2]

如果在第3列和第3列中添加:z3 =(a + b)* [(第3列的值)* 3 +(第x3列的值)* 3]等等

这很好用;但是,如果添加了更多列,这将变得乏味。例如,它可能会得到" 3 4,... x3 x4,..."我想知道是否有更好的方法可以使用循环?

非常感谢:)

1 个答案:

答案 0 :(得分:1)

这是一种方式:

import pandas as pd

df = pd.DataFrame([[1, 'ijk', 1, 2, 3, 3, 2, 0, 1],
                   [2, 'mno', 2, 1, 1, 3, 1, 1, 1]],
                  columns=['Day', 'Name', 'a', 'b', 1, 2, 3, 'x1', 'x2'])

for i in range(1, 4):
    df['y'+str(i)] = df['a'] * df['b'] + df[i]

#output
#Day    Name    a   b   1   2   3   x1  x2  y1  y2  y3
#1     ijk      1   2   3   3   2   0   1   5   5   4
#2     mno      2   1   1   3   1   1   1   3   5   3