如何在大熊猫中选择几个有间隔的连续行?

时间:2018-11-24 10:54:01

标签: python pandas dataframe

我想每3行选择5行。例如,前5行,我想保留最后3行。

Input:

import pandas as pd 
df = pd.DataFrame({'a': np.arange(16)})
print(df)

Output:

     a
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  10
11  11
12  12
13  13
14  14

Expected:

     a
2    2
3    3
4    4
7    7
8    8
9    9
12  12
13  13
14  14

希望获得帮助!

1 个答案:

答案 0 :(得分:1)

groupby与下限索引一起使用,并按tail获取最后3行:

df = df.groupby(df.index // 5).tail(3)
print(df)
     a
2    2
3    3
4    4
7    7
8    8
9    9
12  12
13  13
14  14
15  15 <- last group have only one value, so tail select it

另一个想法是,通过np.arange获取每行的索引值,并将其整形为二维数组,选择最后一个“列”,并以ravel展平,获得与实际索引值的交集,并以{{1 }}:

loc

详细信息

N = 5
M = 3
pos = np.arange((len(df) // N + 1) * N).reshape(-1, N)[:, -M:].ravel()
idx = np.intersect1d(df.index, pos)

df = df.loc[idx]
print(df)
     a
2    2
3    3
4    4
7    7
8    8
9    9
12  12
13  13
14  14