Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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_Dataframe - Fatal编程技术网

Python 两个数据帧之间的相减

Python 两个数据帧之间的相减,python,pandas,dataframe,Python,Pandas,Dataframe,DFOne DFTwo 我需要从DFTwo中的每个值中减去DFOne.NumberValueCol1,直到得到最小的差值 第一次迭代将从DFTwo中的每个值中减去DFOne.NumberValueCol1--10,这将导致 ID结果(DFOne.NumberValueCol1,每个DFTwo.NumberValueCol2值10个值) 在本例中,ID3--DFTwo.NumberValueCol2(9)产生最小的差值1。所以我想把这个值映射到 DFOne.NumberValueCol1--10

DFOne

DFTwo

我需要从DFTwo中的每个值中减去DFOne.NumberValueCol1,直到得到最小的差值

第一次迭代将从DFTwo中的每个值中减去DFOne.NumberValueCol1--10,这将导致

ID结果(DFOne.NumberValueCol1,每个DFTwo.NumberValueCol2值10个值)

在本例中,ID3--DFTwo.NumberValueCol2(9)产生最小的差值1。所以我想把这个值映射到 DFOne.NumberValueCol1--10

第二次迭代将从ID2,DFOne.NumberValueCol1值11开始。但是,不是开始减法 从DFTwo.NumberValueCol2开始,它将从存在匹配点的下一个可用ID开始。 因此,由于有一个ID为3的匹配,下一个起点将是ID为4,它将与第一个逻辑相同,以获得最小的差异


我希望这不会太令人困惑。我来自t-sql世界,因此我试图了解如何使用Pandas而不是传统的sql server游标进行此类计算。

您的问题总结如下:

  • 找到DFWO中的最大值,从DFOne中的第一个值中减去该值
  • 使用DFTwo中最大值的索引,从该索引开始切片DFTwo
  • 使用第二行DFone转到步骤1
  • 一个有效的例子:

     1. Result - 5
     2. Result - 3
     3. Result - 1
     4. Result - 4
     5. Result - 7
    
    然而,我们在这里遇到了DFTwo最终为零的问题


    表面上,这在您的实际用例中不会是一个问题,因为DFTwo足够大,可以支持这种切片吗?没有关于实际业务逻辑的更多信息,这是我最好的尝试。

    您的问题总结如下:

  • 找到DFWO中的最大值,从DFOne中的第一个值中减去该值
  • 使用DFTwo中最大值的索引,从该索引开始切片DFTwo
  • 使用第二行DFone转到步骤1
  • 一个有效的例子:

     1. Result - 5
     2. Result - 3
     3. Result - 1
     4. Result - 4
     5. Result - 7
    
    然而,我们在这里遇到了DFTwo最终为零的问题


    表面上,这在您的实际用例中不会是一个问题,因为DFTwo足够大,可以支持这种切片吗?如果没有关于实际业务逻辑的更多信息,这是我最好的尝试。

    发布最终预期结果post最终预期结果步骤为:1。DFOne第一个值,从DFTO2中减去。匹配两个3中最小的结果。转到DFOne的下一条记录并重新开始最终结果集应包含所有匹配项。它不能是DFTwo的最大值,因为下一个DFOne记录可能与以前的值匹配。最终的结果是,ID来自DFTwo ID 3,结果1(这是10个DfOne值-9个DFWO值)ID 4,结果5(这是11个DfOne值-6个DFWO值)“它不可能是DFWO的最大值,因为下一个DfOne记录可能与以前的值匹配”------什么?如果你想要一组差值(x1-x2)中的最小值,其中第一个值(x1)是常数,那么你可以简单地使用x2最大的一对。我已经更改了代码,以更好地反映你原来的问题,请查看并让我知道这是否更接近你的期望。Hi Konchshell,感谢你回答我的问题。根据我在这篇帖子中给出的要求,是的,你的回答可以让我有一个正确的开始。我的商业用例有点不同,我试着在我的帖子中使用泛型。再次感谢你的帖子!步骤如下:1。DFOne第一个值,从DFTO2中减去。匹配两个3中最小的结果。转到DFOne的下一条记录并重新开始最终结果集应包含所有匹配项。它不能是DFTwo的最大值,因为下一个DFOne记录可能与以前的值匹配。最终的结果是,ID来自DFTwo ID 3,结果1(这是10个DfOne值-9个DFWO值)ID 4,结果5(这是11个DfOne值-6个DFWO值)“它不可能是DFWO的最大值,因为下一个DfOne记录可能与以前的值匹配”------什么?如果你想要一组差值(x1-x2)中的最小值,其中第一个值(x1)是常数,那么你可以简单地使用x2最大的一对。我已经更改了代码,以更好地反映你原来的问题,请查看并让我知道这是否更接近你的期望。Hi Konchshell,感谢你回答我的问题。根据我在这篇帖子中给出的要求,是的,你的回答可以让我有一个正确的开始。我的商业用例有点不同,我试着在我的帖子中使用泛型。再次感谢你的帖子!
     1. Result - 5
     2. Result - 3
     3. Result - 1
     4. Result - 4
     5. Result - 7
    
    import pandas as pd
    
    df1 = {'id': [1,2,3,4,5], 'value': [10,11,20,13,15]}
    df2 = {'id': [1,2,3,4,5], 'value': [5,7,9,6,3]}
    
    df1 = pd.DataFrame(data=df1)
    df2 = pd.DataFrame(data=df2)
    print("DFTwo")
    print(df2)
    print('\n')
    min_index = 0
    df_output = []
    for i in df1['value']:
        try:
            new_val = i - max(df2['value'])
            max_index = int(df2['id'][df2['value'] == max(df2['value'])].values)
            df2 = df2.iloc[max_index:,]
            df_output.append( (max_index, new_val) )
        except:
            break
    print("Output")
    print(pd.DataFrame(df_output, columns = ['id','result']))
    
    2 -- 1
       id  value
    3   4      6
    4   5      3
    0 -- 5
       id  value
    4   5      3
    0 -- 17
    Empty DataFrame
    Columns: [id, value]
    Index: []
    Traceback (most recent call last):
      File "C:/Users/Tyler/Desktop/pd_test.py", line 11, in <module>
        new_val = i - max(df2['value'])
    ValueError: max() arg is an empty sequence
    
    DFTwo
       id  value
    0   1      5
    1   2      7
    2   3      9
    3   4      6
    4   5      3
    
    
    Output
       id  result
    0   3       1
    1   4       5