2024-04-24 19:36:57 发布
网友
我有一个数据集 this,后跟 [这个2
Stkcd代表股票ID,Trddt是datetime,ss是0-1变量。在
现在,对于每只股票,我想确定第一次进入时间,其中ss第一次等于1,第一次存在的时间在第一次1之后,ss等于0,然后计算每个股票的第一次进入时间和第一次存在时间之间的时间差。在
我现在的困难是如何确定第一次进入时间和第一次存在时间。有人帮我吗?我真的很沮丧问题。谢谢非常感谢你!在
这是一个用于测试的小dframe
dframe
df = pandas.DataFrame([ {'Stkcd' : 1, 'Trddt' : datetime.datetime(2018, 1, 2), 'ss' : 0}, {'Stkcd' : 1, 'Trddt' : datetime.datetime(2018, 1, 5), 'ss' : 0}, {'Stkcd' : 1, 'Trddt' : datetime.datetime(2018, 1, 7), 'ss' : 0}, {'Stkcd' : 1, 'Trddt' : datetime.datetime(2018, 2, 2), 'ss' : 1}, {'Stkcd' : 1, 'Trddt' : datetime.datetime(2018, 3, 2), 'ss' : 1}, {'Stkcd' : 1, 'Trddt' : datetime.datetime(2018, 7, 2), 'ss' : 1}, {'Stkcd' : 1, 'Trddt' : datetime.datetime(2018, 7, 2), 'ss' : 0}, ])
这就是密码
对于上面的测试,这是结果
150 days 00:00:00
这里有一个方法。假设有以下数据帧:
Stkcd date ss 0 1 2018-04-01 0 1 1 2018-04-05 0 2 1 2018-04-06 1 3 1 2018-04-08 0 4 2 2018-12-19 1 5 2 2018-12-20 1 6 2 2018-12-22 0 7 2 2018-12-25 0
您可以先了解第一次进入的时间是:
第一次退出:
df_ = df_max.merge(df, on = 'Stkcd') df2 = df_.groupby('Stkcd').apply(lambda x: x.loc[x.idx_max.unique()[0]:,:]) indices_min = df2.reset_index(level=0, drop=True).groupby('Stkcd').agg({'ss':'idxmin'}).values.ravel()
为了得到时差:
final_df = pd.merge(df.loc[indices_max], df.loc[indices_min], on='Stkcd') final_df.assign(time_diff = final_df.date_y-final_df.date_x)[['Stkcd','time_diff']] Stkcd time_diff 0 1 2 days 1 2 3 days
这是一个用于测试的小
dframe
这就是密码
^{2}$对于上面的测试,这是结果
这里有一个方法。假设有以下数据帧:
您可以先了解第一次进入的时间是:
^{2}$第一次退出:
为了得到时差:
相关问题 更多 >
编程相关推荐