Python 每第n行进行一次iloc复合切片
我有一个周期性的数据帧,行数为14,即每个记录有14行数据(平均值、sdev等),我想为每个记录(14行)重复提取第2行、第4行、第7行和第9行。我的代码是: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
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])