我正在尝试通过跳过每4行来切片我的数据框。我能想到的最好方法是获取每4行的索引,然后选择所有其他行。如下所示:
df[~df.index.isin(df[::4].index)]
我想知道是否有更简单和/或更符合Python风格的方法来完成这个任务。df[~df.index.isin(df[::4].index)]
我想知道是否有更简单和/或更符合Python风格的方法来完成这个任务。一种可能的解决方案是使用模数创建掩码,并通过布尔索引
进行过滤:
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)
df = df.drop(df.iloc[::4].index, 0)
- jppdf[(df.index+1)%4!=0]
- Lambda