Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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,我有两个数据帧,一个包含可能触发或不触发动作的事件。另一个表示带有字段的操作,以显示是什么触发了该操作。我的目标是尽可能多的触发动作持续时间 这些键不在我的控制之下,也不是一个完全相等的连接,在这里只找到一个匹配项。我的想法是先进行连接,然后删除负持续时间,因为我知道触发器必须先于操作。然后,我需要删除除每个键的最短持续时间之外的所有键。请参阅示例代码。我希望结果中的所有操作字段“其他数据”。(仅适用于最短持续时间的连接) 我知道我的结果可能包括一些人为的短持续时间,但我怀疑由于连接密钥重用的性

我有两个数据帧,一个包含可能触发或不触发动作的事件。另一个表示带有字段的操作,以显示是什么触发了该操作。我的目标是尽可能多的触发动作持续时间
这些键不在我的控制之下,也不是一个完全相等的连接,在这里只找到一个匹配项。我的想法是先进行连接,然后删除负持续时间,因为我知道触发器必须先于操作。然后,我需要删除除每个键的最短持续时间之外的所有键。请参阅示例代码。我希望结果中的所有操作字段“其他数据”。(仅适用于最短持续时间的连接)
我知道我的结果可能包括一些人为的短持续时间,但我怀疑由于连接密钥重用的性质,这种情况很少发生,并且不会对分析的其余部分造成问题。以前,我一直使用任意选择的最大持续时间来抛出错误的连接数据,但是抛出这些异常值会有问题,因为我最感兴趣的是高异常值

import numpy as np
import pandas as pd

scale = 10000 # can go low like 1000 or high like a million just for dummmy data
trigger_df = pd.DataFrame({'seq_key' : np.random.random_integers(scale * .02,scale *     .2,scale * 7),
                           'time_ns' : np.random.random_integers(scale * .04,scale * .4,scale * 7)})

action_df = pd.DataFrame({'seq_key' : np.random.random_integers(scale * .02,scale * .2,scale * .7),
                       'time_ns' : np.random.random_integers(scale * .04,scale * .4,scale * .7),
                       'other_data' : np.random.random_integers(scale * .03,scale * .3,scale * .7)})
action_df.drop_duplicates(cols='seq_key', take_last=True)

join_df = pd.merge(action_df,trigger_df, 
            on='seq_key', how='inner',
            suffixes=('_action','_trigger'))
join_df['duration_ns'] = join_df.time_ns_action - join_df.time_ns_trigger
join_df = join_df[join_df.duration_ns > 0]

grouped = join_df.groupby(by = ['seq_key'])['duration_ns']
result_df = pd.DataFrame({'duration_ns' : grouped.min()}).reset_index()
print average(result_df.duration_ns)
print average(join_df.duration_ns)
print result_df ,'sad df wants other_data'

这是一个有点类似的问题,以不同的方式完成:感谢看起来很花哨。1.像普通一样连接2.为我的持续时间添加字段\u ns 3.按连接键和持续时间[降序]对结果DF排序(将查看该顺序)4.使用shift键创建一个新的布尔字段(1)比较当前记录以查看下一个记录的持续时间较短,但键相同。(也需要考虑一下这个想法)5.选择我的新布尔字段显示其键最低的所有记录。听起来我对这个建议有把握吗?如果我的帖子成功了,我会更新它。你也可能会发现其中一些食谱很有用:,例如,你可能实际上需要看几个周期(而不仅仅是轮班时的1个周期),但你的想法看起来是对的