Python 熊猫-每天比较2个数据帧以查找第一个实例,其中值是第一个数据帧的倍数

Python 熊猫-每天比较2个数据帧以查找第一个实例,其中值是第一个数据帧的倍数,python,pandas,dataframe,Python,Pandas,Dataframe,早上好:我刚开始学习熊猫,我一直在寻找一个比较选项,但我想我不知道该寻找什么术语 DF1 Day|Time|Dept|Val 01/01/2020|8:42|PWD|10 01/02/2020|8:42|PWD|60 01/03/2020|8:42|PWD|140 01/04/2020|8:42|PWD|200 DF2 [To compare against] Day Time Dept Val 01/01/2020 8:42 PWD 10 01/

早上好:我刚开始学习熊猫,我一直在寻找一个比较选项,但我想我不知道该寻找什么术语

DF1
Day|Time|Dept|Val
01/01/2020|8:42|PWD|10
01/02/2020|8:42|PWD|60
01/03/2020|8:42|PWD|140
01/04/2020|8:42|PWD|200

DF2 [To compare against]

    Day Time    Dept    Val
    01/01/2020  8:42    PWD 10
    01/01/2020  8:46    PWD 12
    01/01/2020  9:21    PWD 21
    01/01/2020  10:15   PWD 18
    01/01/2020  11:30   PWD 26
    01/01/2020  12:25   PWD 15
    01/02/2020  8:42    PWD 60
    01/02/2020  8:46    PWD 55
    01/02/2020  9:21    PWD 19
    01/02/2020  10:15   PWD 102
    01/02/2020  11:30   PWD 111
    01/02/2020  12:25   PWD 120
    01/03/2020  8:42    PWD 140
    01/03/2020  8:46    PWD 90
    01/03/2020  9:21    PWD 50
    01/03/2020  10:15   PWD 220
    01/03/2020  11:30   PWD 290
    01/03/2020  12:25   PWD 210
    01/04/2020  8:42    PWD 200
    01/04/2020  8:46    PWD 90
    01/04/2020  9:21    PWD 50
    01/04/2020  10:15   PWD 220
    01/04/2020  11:30   PWD 250
    01/04/2020  12:25   PWD 399
我希望您的帮助是根据DF1值(至少是两倍)在DF2上找到每天的第一个实例

对于jan1,因为DF1的值是10,我必须找到第一个大于或等于20的实例,对于DF2中的jan1,依此类推

所以输出应该是一个新的数据帧,或者只是修改DF1

   Day         Time  Dept  Val  Found Found_time
0  01/01/2020  8:42  PWD   10   True  9:21
1  01/02/2020  8:42  PWD   60   True  10:15
2  01/03/2020  8:42  PWD  140   True  11:30
3  01/04/2020  8:42  PWD  200  False  NULL
为了获得更多关于我迄今为止所做工作的背景知识,我最初的问题是针对熊猫的


谢谢大家的帮助。自从我开始编写代码以来已经24年了,我对fortran和cobol语言的巨大变化感到惊讶

IIUC,您只需在每个
中保留最大值,然后在
合并并比较相应的

df1 = (df1.merge(df2.sort_values('Val')
                    .drop_duplicates('Day',keep='last')
                    [['Day','Val']],
                 on='Day',
                 how='left',
                 suffixes=['','_r'])
          .assign(Found=lambda x: x['Val']*2 <= x['Val_r'])
          .drop('Val_r', axis=1)
      )

编辑以匹配更新的输出:

new_df = (df1.merge(df2, on=['Day','Dept'],
                    how='left',
                    suffixes=['','_r'])
             .assign(Found=lambda x: x['Val_r']>=2*x['Val'],
                     Found_time=lambda x: x.Time_r.where(x.Found))
             .groupby(['Day','Time','Dept'])
             .agg({'Found':'any',
                   'Found_time':'first'})
             .reset_index()
         )
输出:

          Day  Time Dept  Val  Found
0  01/01/2020  8:42  PWD   10   True
1  01/02/2020  8:42  PWD   60   True
2  01/03/2020  8:42  PWD  140   True
3  01/04/2020  8:42  PWD  200  False
          Day  Time Dept  Found Found_time
0  01/01/2020  8:42  PWD   True       9:21
1  01/02/2020  8:42  PWD   True      12:25
2  01/03/2020  8:42  PWD   True      11:30
3  01/04/2020  8:42  PWD  False        NaN

广。谢谢我考虑过这个解决方案。问题是我们需要在下订单时按时间进行分发。因此,最终我们需要获得订单最终下达的第一个实例。我们最终希望对一天中的什么时间我们必须从一天开始消费至少两倍的amt进行某种统计分析。现在预期产出中没有给出这一点,是吗:-)。无论如何,你可以在合并后通过查询来完成。哈哈,我的错。也许我应该编辑最后的数据帧,并添加一个时间域,这样它就更清晰了。谢谢。。让我看看。那正是我想要的。广:我试过了,效果很好。再次感谢。Lambda似乎超级强大。