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似乎超级强大。