熊猫将行切成薄片

时间:2019-02-13 10:07:52

标签: python python-3.x pandas

这是我的数据:

                     o  h  l  c
time                           
2019.02.04 01:21:00  x  x  x  x
2019.02.04 01:22:00  x  x  x  x
2019.02.04 01:23:00  x  x  x  x
2019.02.04 01:24:00  x  x  x  x
2019.02.04 01:25:00  x  x  x  x
2019.02.04 01:26:00  x  x  x  x
2019.02.04 01:27:00  x  x  x  x
2019.02.04 01:28:00  x  x  x  x
2019.02.04 01:29:00  x  x  x  x
2019.02.04 01:30:00  x  x  x  x
2019.02.04 01:31:00  x  x  x  x
2019.02.04 01:32:00  x  x  x  x
2019.02.04 01:33:00  x  x  x  x
2019.02.04 01:34:00  x  x  x  x
2019.02.04 01:35:00  x  x  x  x
2019.02.04 01:36:00  x  x  x  x
2019.02.04 01:37:00  x  x  x  x
2019.02.04 01:38:00  x  x  x  x
2019.02.04 01:39:00  x  x  x  x
2019.02.04 01:40:00  x  x  x  x
2019.02.04 01:41:00  x  x  x  x
2019.02.04 01:42:00  x  x  x  x
2019.02.04 01:43:00  x  x  x  x
2019.02.04 01:44:00  x  x  x  x
2019.02.04 01:45:00  x  x  x  x

在时间为index的情况下,我尝试将这些值分开。但是没有成功。

从头开始,我想每3行进行切片,而每片之间跳过2行。

我尝试过:

df_candle = df[5:400+2]

但这是5 to 402中的简单系列。我认为这可以帮助我跳到2。

我期望结果为:

time,o,h,l,c
2019.02.04 01:21:00,x,x,x,x
2019.02.04 01:22:00,x,x,x,x
2019.02.04 01:23:00,x,x,x,x
2019.02.04 01:26:00,x,x,x,x
2019.02.04 01:27:00,x,x,x,x
2019.02.04 01:28:00,x,x,x,x
2019.02.04 01:31:00,x,x,x,x
2019.02.04 01:32:00,x,x,x,x
2019.02.04 01:33:00,x,x,x,x
2019.02.04 01:36:00,x,x,x,x
2019.02.04 01:37:00,x,x,x,x
2019.02.04 01:38:00,x,x,x,x
2019.02.04 01:41:00,x,x,x,x
2019.02.04 01:42:00,x,x,x,x
2019.02.04 01:43:00,x,x,x,x

请让我知道我能做什么。

2 个答案:

答案 0 :(得分:2)

尝试:

df1=df[5:400]
print(df1.drop([i for i in df1.index.tolist() if (str(i)[-1] in ['8','9']) or (str(i+5)[-1] in ['8','9'])]))

输出:

                   time        o        h        l        c
5   2019.02.04 01:26:00  1.14558  1.14558  1.14556  1.14556
6   2019.02.04 01:27:00  1.14556  1.14556  1.14556  1.14556
7   2019.02.04 01:28:00  1.14556  1.14556  1.14549  1.14551
10  2019.02.04 01:31:00  1.14554  1.14554  1.14546  1.14546
11  2019.02.04 01:32:00  1.14551  1.14551  1.14541  1.14544
12  2019.02.04 01:33:00  1.14543  1.14543  1.14541  1.14541
15  2019.02.04 01:36:00  1.14557  1.14558  1.14553  1.14556
16  2019.02.04 01:37:00  1.14556  1.14556  1.14556  1.14556
17  2019.02.04 01:38:00  1.14557  1.14557  1.14556  1.14556
20  2019.02.04 01:41:00  1.14555  1.14555  1.14555  1.14555
21  2019.02.04 01:42:00  1.14555  1.14555  1.14551  1.14551
22  2019.02.04 01:43:00  1.14555  1.14555  1.14551  1.14551

答案 1 :(得分:2)

IIUC,您正在寻找可变步长切片。我能想到的一种选择是使用groupbycumcount构建过滤器蒙版:

df[df.groupby(pd.RangeIndex(len(df)) // 5).cumcount() < 3]

                     o  h  l  c
time                           
2019.02.04 01:21:00  x  x  x  x
2019.02.04 01:22:00  x  x  x  x
2019.02.04 01:23:00  x  x  x  x
2019.02.04 01:26:00  x  x  x  x
2019.02.04 01:27:00  x  x  x  x
2019.02.04 01:28:00  x  x  x  x
2019.02.04 01:31:00  x  x  x  x
2019.02.04 01:32:00  x  x  x  x
2019.02.04 01:33:00  x  x  x  x
2019.02.04 01:36:00  x  x  x  x
2019.02.04 01:37:00  x  x  x  x
2019.02.04 01:38:00  x  x  x  x
2019.02.04 01:41:00  x  x  x  x
2019.02.04 01:42:00  x  x  x  x
2019.02.04 01:43:00  x  x  x  x