使用条件和分组依据操作Pandas DataFrame

问题描述 投票:-2回答:1

DataFrame

我拥有上面的DataFrame,其中包含数百种乐器和不同的日期。对于每个日期中的每个乐器,我希望查找两行RecordType =='TRADE'(以黄色突出显示)。第一个交易类型位于RecordType =='Control'之后,第二个交易类型位于第一个交易之后30分钟,即,第一个交易之后30分钟内的最新交易。在我的示例中,第一次交易(9:59:47 AM)后30分钟应为10:29:47 AM,如果我将时间戳转换为毫秒(自午夜开始),则应为35987025 +(30分钟* 60 * 1000)= 37787025。因此,在37787025之前的最后一笔交易为37417668毫秒,以黄色突出显示。用红色突出显示的那些交易不是我想要的。

我可以知道最好的编码方法是什么吗?我的目的是获取工具,日期,时间和价格信息,以便我可以在市场开盘后30分钟比较价格变化。我知道我必须进行groupby(['Instrument','Date'])进行分析。谢谢。

python pandas dataframe conditional-statements
1个回答
0
投票

知道将applygroupby一起使用可能对您很有用。这不是经过测试的解决方案,而是如何到达那里的粗略指南:

def handle_single_group(df):
    trades = df[df.RecordType=='TRADE']
    first_trade = trades.iloc[0]

    latest_time_ok = first_trade['Time'] + timedelta(30)
    last_trade = trades[trades.Time <= latest_time_ok].iloc[-1]
    return pd.concat([first_trade, last_trade], axis=0)

df.groupby(['Instrument', 'Date']).apply(handle_single_group)

这假设交易是按时间排序的。如果不是这种情况,您也可以使用argmax

© www.soinside.com 2019 - 2024. All rights reserved.