【问题标题】:Adding and subtract inbetween row inputs and value equal to the first column next row using pandas使用熊猫在行输入之间添加和减去等于下一行第一列的值
【发布时间】:2019-11-23 07:42:53
【问题描述】:

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

   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

【问题讨论】:

  • 索引为1的行有d+e+f!=g,应该是d+e-f!=g吗?如果不是,请解释一下为什么是第二个+
  • 另外,我认为您应该编辑您的示例以包含真实数据,或者至少与您的真实数据相似(类型)
  • @Adam.Er8 抱歉,我更正了。它是 d+e-f !=g。我将使用我的 csv 数据进行编辑。给我一些时间。
  • @Adam.Er8I 编辑了我的问题。现在您可以再次检查。谢谢
  • 好吧,看来你确实需要字符串连接,看看 U10-Forward 的回答,它应该可以工作。只是 1 个问题,63+0-0!=63 显然不是真的,你确定所有行都需要!= 吗?不依赖于价值?

标签: python-3.x pandas time


【解决方案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
>>> 

【讨论】:

  • 注意:真实数据是数字的,从问题来看,他似乎需要实际的算术计算,而不仅仅是字符串连接
  • (无论哪种方式,重要的是正确使用班次,从那里很容易做任何OP需要的事情)。
  • @U10-Forward 感谢您的快速回复,在这里我同意他的看法(Adam.Er8)。这只是为了理解我写的。实际上我想将代码应用于数值数据。
  • @U 10-Forward 在这里我再次编辑了我的问题,希望现在你能理解我提到的内容
  • @U10-Forward 在这里我应用了你的代码,它给出了这个错误“ufunc'add'没有包含签名匹配类型dtype('
【解决方案2】:

在您的帮助下,我找到了答案。非常感谢你帮助我。 @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]

【讨论】:

  • @Adam.Er8 感谢您帮助我解决我的代码。我希望这段代码根据你的 cmets 是正确的,并且这适用于我的数据
  • , @U10-Forward 感谢您帮助我解决我的代码。我希望这段代码根据你的 cmets 是正确的,并且这适用于我的数据
  • @anky_91 感谢您帮助我解决我的代码。我希望这段代码根据你的 cmets 是正确的,并且这适用于我的数据
猜你喜欢
  • 2017-02-20
  • 2019-02-05
  • 1970-01-01
  • 2022-11-07
  • 2020-10-08
  • 1970-01-01
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多