Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于条件比较列值_Python_Pandas_Conditional Statements_Multiple Columns_Difference - Fatal编程技术网

Python 基于条件比较列值

Python 基于条件比较列值,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+'

我有一个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+').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)]