我的数据框
df1:
Index Amount 01.01.2018 08:00:00 23.25 01.01.2018 08:10:00 25.50 01.01.2018 08:20:00 26.30 01.01.2018 08:30:00 25.00 01.01.2018 08:40:00 20.00 01.01.2018 08:50:00 21.20 01.01.2018 09:00:00 21.20 01.01.2018 09:10:00 31.20
df2:
Index Operation 01.01.2018 -5.00 01.01.2018 10.00
我想在df1中跟踪来自df2的操作。
因此,基本上检查df2中的“操作”,然后找到df1中发生此事件的位置。对于前。-5.00,并且此事件发生在这里:
01.01.2018 08:30:00 25.00 01.01.2018 08:40:00 20.00
我期望的输出:
df:
Index Amount Operation_T/F Amount_Operation 01.01.2018 08:00:00 23.25 0 0 01.01.2018 08:10:00 25.50 0 0 01.01.2018 08:20:00 26.30 0 0 01.01.2018 08:30:00 25.00 0 0 01.01.2018 08:40:00 20.00 1 -5.0 01.01.2018 08:50:00 21.20 0 0 01.01.2018 09:00:00 21.20 0 0 01.01.2018 09:10:00 31.20 1 10.0
一天中操作可以重复的事实并不是问题。当然,使用一些for和if可能是一个解决方案,但是我试图在python中实现干净的代码,并且我正在考虑一种更好的方法。
在编写该内容True
或False
操作价值时存在一些问题,if in row
或者row + 1
。我要解决的想法是为两行创建垃圾箱,然后跟踪该垃圾箱中是否发生了操作事件。你怎么看?
提前致谢 :)
这是一种diff
用于检查第一个差异在哪里df2.Operation
等于df2.Operation
并利用广播的方法:
m = df1.Amount.diff().values == df2.Operation.values[:,None]
df1['Operation_T/F'] = m.sum(0)
df1['Amount_Operation'] = (m * df2.Operation.values[:,None]).sum(0)
Index Amount Operation_T/F Amount_Operation
0 2018-01-01 08:00:00 23.25 0 0.0
1 2018-01-01 08:10:00 25.50 0 0.0
2 2018-01-01 08:20:00 26.30 0 0.0
3 2018-01-01 08:30:00 25.00 0 0.0
4 2018-01-01 08:40:00 20.00 1 -5.0
5 2018-01-01 08:50:00 21.20 0 0.0
6 2018-01-01 09:00:00 21.20 0 0.0
7 2018-01-01 09:10:00 31.20 1 10.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句