在pandas中跳过每个第n行

3
我正在尝试通过跳过每4行来切片我的数据框。我能想到的最好方法是获取每4行的索引,然后选择所有其他行。如下所示: df[~df.index.isin(df[::4].index)] 我想知道是否有更简单和/或更符合Python风格的方法来完成这个任务。

2
一种替代方法:df = df.drop(df.iloc[::4].index, 0) - jpp
1
尝试这个:df[(df.index+1)%4!=0] - Lambda
1个回答

2

一种可能的解决方案是使用模数创建掩码,并通过布尔索引进行过滤:

df = pd.DataFrame({'a':range(10, 30)}, index=range(20))
#print (df)


b = df[np.mod(np.arange(df.index.size),4)!=0]
print (b)
     a
1   11
2   12
3   13
5   15
6   16
7   17
9   19
10  20
11  21
13  23
14  24
15  25
17  27
18  28
19  29

细节:

print (np.mod(np.arange(df.index.size),4))
[0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3]

print (np.mod(np.arange(df.index.size),4)!=0)
[False  True  True  True False  True  True  True False  True  True  True
 False  True  True  True False  True  True  True]

如果唯一的索引值使用了@jpp评论中给出的稍作修改的解决方案:

b = df.drop(df.index[::4], 0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接