Python 基于条件比较列值
我有一个txt文件的以下输出。我的目标是找到第2列和第3列的值之间的差异,只要第1列中的值保持在5以下或等于5,这意味着我的预期输出是第5行之前第2列和第3列的值之间的差异,因为第6行中的第1列值大于5Python 基于条件比较列值,python,pandas,conditional-statements,multiple-columns,difference,Python,Pandas,Conditional Statements,Multiple Columns,Difference,我有一个txt文件的以下输出。我的目标是找到第2列和第3列的值之间的差异,只要第1列中的值保持在5以下或等于5,这意味着我的预期输出是第5行之前第2列和第3列的值之间的差异,因为第6行中的第1列值大于5 1 4 5 267 388 4 4 7 5 3 2 6 8 4 我尝试了以下方法 import pandas as pd data= pd.read_table('/Users/Hrihaan/Desktop/A.txt', dtype=float, header=None, sep='\s+'
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)
将熊猫作为pd导入
data=pd.read_table('/Users/Hrihaan/Desktop/A.txt',dtype=float,header=None,sep='\s+')。值
x=数据[:,0]
y=(数据[:,1]对于x我认为SyntaxError
来自于您对生成器的理解,因为它实际上没有任何作用。迭代的是什么
无论如何,您可以直接选择列为0的行作为np导入numpy
>>>np.where(data[:,0],或者您可以尝试以下方法
(df2['v2'].subtract(df2['v3']))[(df2['v1']<=5)]
Out[856]:
0 -1
1 -1
2 0
3 -3
4 1
dtype: int64
假设您的列名是'a'
,'b'
和'c'
。只需将列名与您自己的列名交换即可
选项1
df.query('a <= 5').eval('b - c')
感谢您的建议,我尝试按照您的方式操作,但在此行(Diff=data.loc[idx,1]-data.loc[idx,2])中收到了此错误(AttributeError:'numpy.ndarray'对象没有属性'loc')),你能帮我解决吗?属性错误的原因是,当你通过.values
读取数据帧时,你立即将数据帧变成了一个numpy数组。我按照说明编辑了我的代码,它运行得非常好。感谢温的建议,我尝试了这个Diff=(数据['v2'])。减法(数据['v3'])[(数据)['v1']@Hrihaan将其转换为Dataframe
可能会解决此问题感谢您的建议,因此我需要将数据转换为pandas Dataframe才能工作?
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]
(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
df.query('a <= 5').eval('b - c')
df.b.sub(df.c)[df.a.le(5)]