使用熊猫在行输入和值等于第一列的下一行之间加减法

时间:2019-07-14 08:07:07

标签: python-3.x pandas time

假设我有一个包含三个输入的数据集:

   x1   x2  x3  
0  a    b   c
1  d    e   f
2  g    h   i
3  j    k   l
4  m    n   o
5  p    q   r
6  s    t   u 
      :
      :

0、1、2、3是时间,x1,x2,x3是要测量的输入。因此,这里x1输入每隔一小时测量一次。 x2和x3将在不同的时间测量。我需要做的是,我想写的是,无论在x1,x2,x3中测得的值是多少,它将相加并减去等于下一次输入的x1值 所以我想做的是:

    x1   x2   x3   y
 0  a    b    c   a+b-c=d
 1  d    e    f   d+e-f=g
 2  g    h    i   g+h-i=j
 3  j    k    l   j+k-l=m
 4  m    n    o   m+n-o=p
 5  p    q    r   p+q-r=s
 6  s    t    u   s+t-u=v
         :
         :

根据我的csv文件,这里有我的实​​际数据:

             X1     x2    x3    y
   0         63      0     0    63+0-0=63
   60(min)   63      0     2    63+0-2 =104
   120       104     11    0    104+11-0=93
   180       93      0    50    93+0-50=177
   240       177     0     2    177+0-2=133
   300       133     0     0    133+0-0=next value of x1

我尝试了shift方法,但是它对我来说根本不起作用。我尝试了另一种方法,它奏效了,但并没有如我所愿。在这里,我上传了代码。

Code :
 data = pd.read_csv('data6.csv')
 i=0
 j=1
 while j < len(data):
   j=data['x1'][i] - data['x2'][i] + data['x3'][i] 
   i+=1 
   j!=i 
  print(j)

这是可行的,但仅显示一个数据

  

63

在我的csv文件中,这是x1输入的第二个输入值。 我想连续编写此代码,并读取上面显示的值。 谁能帮助我解决这个问题?

My csv file

2 个答案:

答案 0 :(得分:1)

尝试:

>>> df['y'] = df['x1'] + '+' + df['x2'] + '-' + df['x3'] + '!=' + df.shift(-1)['x1']
>>> df
  x1 x2 x3         y
0  a  b  c  a+b-c!=d
1  d  e  f  d+e-f!=g
2  g  h  i  g+h-i!=j
3  j  k  l  j+k-l!=m
4  m  n  o  m+n-o!=p
5  p  q  r  p+q-r!=s
6  s  t  u       NaN
>>> 

答案 1 :(得分:0)

我在您的帮助下找到了答案。非常感谢您对我的帮助。 @ Adam.Er8,@ U10-Forward和@ anky_91

这是我的代码:

df = pd.DataFrame(data)     
df['y'] = 0 
for i in range(len(df)-1): #iterating between all the rows of dataframe
   df['y'].iloc[i] == df['x1'].iloc[i] + df['x2'].iloc[i] - df['x3'].iloc[i]
   df['y'].iloc[i] = df['x1'].iloc[i+1]