Python 每第n行进行一次iloc复合切片

Python 每第n行进行一次iloc复合切片,python,pandas,dataframe,indexing,slice,Python,Pandas,Dataframe,Indexing,Slice,我有一个周期性的数据帧,行数为14,即每个记录有14行数据(平均值、sdev等),我想为每个记录(14行)重复提取第2行、第4行、第7行和第9行。我的代码是: Mean_df=df.iloc[[1,3,6,8]::14,:].copy() 这是行不通的 TypeError:无法使用这些索引器[[1,3,6,8]]对进行切片索引 我从这里获得了代码方面的帮助,这很有用,但在多行选择方面没有帮助-- 我可以提取几个不同的切片并进行组合,但感觉可能有更优雅的解决方案 有什么想法吗?使用: df[np

我有一个周期性的数据帧,行数为14,即每个记录有14行数据(平均值、sdev等),我想为每个记录(14行)重复提取第2行、第4行、第7行和第9行。我的代码是:

Mean_df=df.iloc[[1,3,6,8]::14,:].copy()

这是行不通的

TypeError:无法使用这些索引器[[1,3,6,8]]对进行切片索引

我从这里获得了代码方面的帮助,这很有用,但在多行选择方面没有帮助--

我可以提取几个不同的切片并进行组合,但感觉可能有更优雅的解决方案

有什么想法吗?

使用:

df[np.isin(np.arange(len(df))%14,np.array([1,3,6,8]))]

可以将元组理解与和一起使用:

在本例中,使用
1::14
对数据帧行进行索引等同于使用
切片(1,df.shape[0],14)
进行索引


这是相当通用的,您可以定义切片对象的任何元组,并传递到
np.r\u

Cheers,这做得很好,将来绝对会再次使用。谢谢!这对于提供索引来说很好——用作
df.iloc[res,:]
工作得很好,列表comp非常pythonic。我不知道它是否像温的回答那样可读/优雅。@DrBAC,不管它值多少钱,我认为温的解决方案更适合你的具体例子。而我的解决方案更通用。
arr = np.arange(14*3)
slices = tuple(slice(i, len(arr), 14) for i in (1, 3, 6, 8))

res = np.r_[slices]

print(res)

array([ 1, 15, 29,  3, 17, 31,  6, 20, 34,  8, 22, 36])