Управление Pandas DataFrame с условиями и групповым - PullRequest
0 голосов
/ 09 января 2020

DataFrame

У меня есть вышеуказанный DataFrame с сотнями инструментов и различными датами. Для каждого инструмента в каждой дате:

I sh, чтобы найти 2 строки RecordType=='TRADE' (выделены желтым цветом).

Первый тип сделки - сразу после RecordType=='Control', а

второй тип сделки - через 30 минут после первой сделки, то есть самая последняя сделка в течение 30 минут после первой сделки ,

В моем примере 30 минут после первой сделки (9:59:47) должны быть 10:29:47, а если я конвертирую метку времени в миллисекунды (с полуночи), это 35987025 + (30 минут * 60 * 1000) = 37787025. Следовательно, последняя сделка до 37787025 находится на 37417668 миллисекунд, что выделено желтым цветом. Эти сделки, выделенные красным, НЕ те, что я хочу.

Могу ли я узнать, как лучше всего это закодировать? Я знаю, что мне нужно groupby(['Instrument', 'Date']) для анализа. Спасибо.

1 Ответ

0 голосов
/ 09 января 2020

Возможно, вам полезно знать, что вы можете использовать apply вместе с groupby. Это не проверенное решение, а приблизительное руководство, как туда добраться:

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, если это не так.

...