从熊猫数据帧生成汇总表

时间:2021-04-19 03:25:35

标签: python pandas dataframe

我有一个来自算法交易机器人的事件日志加载到数据框中,如下所示:

          datetime_long     high     low       trade_direction  trade_entry  trade_exit
159  2021-02-05 10:15:00   88.915   88.6150              LE          1.0         0.0
160  2021-02-05 10:30:00   89.395   88.7800              LX          0.0         1.0
172  2021-02-05 13:30:00   89.090   88.9000              LE          1.0         0.0
177  2021-02-05 14:45:00   89.410   89.1900              LX          0.0         1.0
206  2021-02-08 15:30:00   88.885   88.6600              LE          1.0         0.0
207  2021-02-08 15:45:00   89.080   88.7700              LX          0.0         1.0

“LE”表示多头入场,“LX”多头出场,“SE”空头入场,“SX”空头出场。目标是让每个“退出”与前一个“进入”位于同一行,以便我可以执行一些简单的算术计算,例如确定利润、平均持有时间等。

如何进行“移位”仅向上一行退出,以便我的条目和相应的退出在同一行上?

1 个答案:

答案 0 :(得分:1)

您可以使用 .str.contains() 检查 Series 中的元素是否包含值。

X_mask = df['trade_direction'].str.contains('X')
X_previous_mask = X_mask.shift(-1).fillna(False)
E_mask = df['trade_direction'].str.contains('E')

你可以使用

# Entry Rows where Entry next row is Exit
X_previous_E_mask = X_previous_mask & E_mask

# Entry and Exit Rows where Entry next row is Exit
X_and_previous_E_mask = X_previous_E_mask | X_mask

最后,您可以使用布尔索引来选择行。

df[mask]