我有一个txt文件的以下输出。我的目标是找到第2列和第3列的值之间的差异,只要第1列中的值保持低于或等于5,这意味着我的预期输出是第2行和第3行之间的差异,直到第5行为第6行中的第1列值大于5.
我尝试了以下方法。
import pandas as pd
data= pd.read_table('/Users/Hrihaan/Desktop/A.txt', dtype=float, header=None, sep='\s+').values
x=data[:,0]
y=(data[:,1] for x<=5)
z=(data[:,2] for x<=5)
Diff=y-z
print(Diff)
我收到了这个错误:(语法错误:语法无效),任何有关如何实现它的帮助都会非常有帮助。
答案 0 :(得分:3)
import numpy as np
>>> np.where(data[:, 0] <= 5, data[:, 1] - data[:, 2], np.nan)
array([ -1., -1., 0., -3., 1., nan])
对于您的代码,您可以使用条件列表理解:
y = [i for x, i in zip(data[:, 0], data[:, 1]) if x <= 5]
z = [i for x, i in zip(data[:, 0], data[:, 2]) if x <= 5]
diff = [a - b for a, b in zip(y, z)]
...或
diff = [y - z for x, y, z in data if x <= 5]
答案 1 :(得分:2)
或者你可以试试这个
(df2['v2'].subtract(df2['v3']))[(df2['v1']<=5)]
Out[856]:
0 -1
1 -1
2 0
3 -3
4 1
dtype: int64
数据输入
df2
Out[857]:
v1 v2 v3
0 1 4 5
1 2 6 7
2 3 8 8
3 4 4 7
4 5 3 2
5 6 8 4
答案 2 :(得分:2)
假设您的列名称为'a'
,'b'
和'c'
。只需用您自己的
选项1
df.query('a <= 5').eval('b - c')
选项2
df.b.sub(df.c)[df.a.le(5)]
答案 3 :(得分:1)
我认为SyntaxError
来自你的生成器理解,因为它并没有真正做任何事情。什么是迭代?
无论如何,您可以直接选择列为<= 5
的行,如下所示:
编辑:您不需要将DataFrame转换为.values
的numpy数组。
import pandas as pd
data = pd.read_table('/Users/Hrihaan/Desktop/A.txt', dtype=float, header=None, sep='\s+') # note: no .values
idx = data[0] <= 5
Diff = data.loc[idx, 1] - data.loc[idx, 2]
print(Diff)