当前位置: 首页 > 知识库问答 >
问题:

基于时间戳合并数据帧

公孙慎之
2023-03-14

有两个这样的数据帧(示例)

df1

                   Data  Value
0   2020-01-31 10:30:00      3
1   2020-01-31 11:30:00      4
2   2020-01-31 12:30:00     19
3   2020-01-31 13:30:00     22
4   2020-01-31 14:30:00      4
5   2020-01-31 15:30:00      5
6   2020-01-31 15:30:00      6
7   2020-01-31 16:30:00      7
8   2020-01-31 17:30:00      9
9   2020-01-31 18:30:00      7
10  2020-01-31 19:30:00      8

df2

                DSTART                 DEnd Condition
0  2020-01-31 11:30:00  2020-01-31 12:30:00       BAD
1  2020-01-31 15:30:00  2020-01-31 16:30:00     ERROR

然后,我想加入df1和df2,但是我不知道如何做到这一点,因为在第二个df中我只有开始和结束时间。如何根据第二个df的数据将条件放在第一个df上?

这就是我想要的

                   Data  Value Condition
0   2020-01-31 10:30:00      3        OK
1   2020-01-31 11:30:00      4       BAD
2   2020-01-31 12:30:00     19       BAD
3   2020-01-31 13:30:00     22       BAD
4   2020-01-31 14:30:00      4        OK
5   2020-01-31 15:30:00      5     ERROR
6   2020-01-31 15:30:00      6     ERROR
7   2020-01-31 16:30:00      7        OK
8   2020-01-31 17:30:00      9        OK
9   2020-01-31 18:30:00      7        OK
10  2020-01-31 19:30:00      8        OK

共有1个答案

解阳荣
2023-03-14

试试看。合并(asof):

# make sure that `Data`, `DSTART`, `DEnd` are datetime type
# use `pd.to_datetime` if needed
tmp = pd.merge_asof(df1,df2, left_on='Data', right_on='DSTART')

df1['Condition'] = tmp['Condition'].where(tmp['Data'] <= tmp['DEnd'], 'OK')

输出:

                  Data  Value Condition
0  2020-01-31 10:30:00      3        OK
1  2020-01-31 11:30:00      4       BAD
2  2020-01-31 12:30:00     19       BAD
3  2020-01-31 13:30:00     22        OK
4  2020-01-31 14:30:00      4        OK
5  2020-01-31 15:30:00      5     ERROR
6  2020-01-31 15:30:00      6     ERROR
7  2020-01-31 16:30:00      7     ERROR
8  2020-01-31 17:30:00      9        OK
9  2020-01-31 18:30:00      7        OK
10 2020-01-31 19:30:00      8        OK
 类似资料:
  • 如何在具有时间戳类型的列上使用Spring data JPA从表中检索数据。数据库是mySQL 列定义 域对象 Spring数据JPA代码 服务等级 由于DB列有一个时间戳(2017-05-07 06:45:19),因此它总是返回null,基本上我想返回所有最后更新日期为今天/当前日期的记录。

  • 我每天都在cassandra中存储时间序列数据。我们希望每天归档/清除超过2天的数据。我们正在使用Hector API来存储数据。有人能建议我每天删除超过2天的cassandra数据的方法吗?对cassandra行使用TTL方法是不可行的,因为删除数据的天数是可配置的。现在表格中没有时间戳列。我们计划添加时间戳列。但问题是,时间戳不能单独用于where子句,因为这个新列不是主键的一部分。请提供您的

  • 例如,对于hbase表“test_table”,插入的值为: 在扫描“test_table”时,其中version=t+4应返回 如何在HBase中实现基于时间戳的扫描(基于小于或等于时间戳的最新可用值)?

  • 问题内容: 有哪些方法可以合并时间戳不完全匹配的列? DF1: DF2: 我可以在[‘date’,’employee_id’,’session_id’]加入,但是有时同一名员工在同一日期会有多个相同的会话,这会导致重复。我可以删除发生这种情况的行,但是如果这样做,我将丢失有效的会话。 如果DF1的时间戳小于DF2的时间戳少于5分钟,并且session_id和employee_id也匹配,是否有一种

  • 我偶然发现了这个不错的教程https://github.com/manashmndl/DeadSimpleSpeechRecognizer其中数据是基于由文件夹分隔的样本进行训练的,所有mfcc都是一次计算的。 我正试图以不同的方式实现类似的目标。 基于此:https://librosa.github.io/librosa/generated/librosa.feature.mfcc.html l

  • 在DynamoDB中,我有一个表,其中每条记录都有两个日期属性,