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

数据挖掘 Python 时间序列 熊猫
2022-03-04 09:52:17

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

   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
         :
         :

我尝试了 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 输入的第二个输入值。我想编写这段代码,并读取上面显示的值。谁能帮我解决这个问题?

我的 .csv 文件

1个回答

那么您是否在评估每个样本的 a+bc 和 d 的相等性?意思是,您的目标是保存布尔值?如果是这样的话:

import pandas as pd
#a sample dictionary
data = {'x1':[1,0,4,5,8,1], 
     'x2':[3,4,5,6,8,9],
     'x3':[4,5,1,-2,4,5]}
df = pd.DataFrame(data) #converting the dictionary to dataframe
df['y'] = 0 #initializing the y column with 0, also you can initialize with FALSE boolean value
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['x1'].iloc[i+1] 

注意:对于最后一行,由于 y 列的内容要根据下一行计算,所以无法计算值,所以我们设置了(len(df)-1).

结果:

   x1  x2  x3      y
0   1   3   4   True
1   0   4   5  False
2   4   5   1  False
3   5   6  -2  False
4   8   8   4  False
5   1   9   5      0

您的代码的问题: 首先,您没有考虑后续行来计算表达式的准确性a+bc==d 其次,如果 print(j) 在循环之外,是吗?那么你在数据帧的行中循环,而 j 小于数据帧的长度,所以当流量超出这个 while 时,将返回单个值 j。