Python 在5组中,使用熊猫或numpy对2对和3对进行高级切片

Python 在5组中,使用熊猫或numpy对2对和3对进行高级切片,python,pandas,numpy,Python,Pandas,Numpy,我有一个pandas表,下面可以用pd.read_剪贴板复制/粘贴和读取。我需要取2个连续值和3个连续值的切片,这是一个两对,三对的列表, 如第y1列所示。所以0,1是一对,然后2,3,4是一对,然后每5组继续。我需要把整个列表分成两部分。这是一组5个,其中前2个是一对,后3个是一对。 所以14,1是一对,4,10,8是一对,每5对都是一样的 what W1 W2 W8 W9 W0 y Y x y4 y1 0 14 4 14 12

我有一个pandas表,下面可以用pd.read_剪贴板复制/粘贴和读取。我需要取2个连续值和3个连续值的切片,这是一个两对,三对的列表, 如第y1列所示。所以0,1是一对,然后2,3,4是一对,然后每5组继续。我需要把整个列表分成两部分。这是一组5个,其中前2个是一对,后3个是一对。 所以14,1是一对,4,10,8是一对,每5对都是一样的

    what  W1  W2  W8  W9  W0   y   Y   x  y4  y1      
0     14   4  14  12  14   2  15   4   7   1   1      
1      1  11   1   3   1  13   0  14   8  10   1      
2      4  14   4   6   4   8   5   5  13  13   1      
3     10   0  10   8  10   6  11   9   3   8   1      
4      8   2   8  10   8   4   9  12   1   8   1      
5     15  15  13  11  15   0   4  15   4  11  11      
6     11  11   9  15  11   4   0   9   0   2  11      
7      9   9  11  13   9   6   2   0   2  10  11      
8      2   2   0   6   2  13   9   9   9   0  11      
9      0   0   2   4   0  15  11  15  11  10  11      
10     4   6   4  13   4  12  13   6   7   9   9      
11     9  11   9   0   9   1   0   1  10   2   9      
12     3   1   3  10   3  11  10  10   0   7   9      
13     2   0   2  11   2  10  11   3   1  10   9      
14    10   8  10   3  10   2   3  12   9  14   9      
15    13  13   5  14  13   2   6  13   2  11  11      
16    11  11   3   8  11   4   0   4   4   8  11      
17     4   4  12   7   4  11  15   7  11   4  11      
18     8   8   0  11   8   7   3   7   7   4  11      
19     4   4  12   7   4  11  15   9  11   7  11
我已经尝试过这个方法,它给出了正确的结果,但是没有重复

In [1540]: df['what'][:].to_numpy()[0:2:]                                                                                                                                                                                                            
Out[1540]: array([14,  1], dtype=int8)

In [1538]: df['what'][2:].to_numpy()[0:3:]                                                                                                                                                                                                           
Out[1538]: array([ 4, 10,  8], dtype=int8)
这正是我想要的,但它不会继续切片到列表的末尾,我想要的是它继续切片,所以我得到所有对,如下所示:

 array([ 4, 10, 8, 9, 2, 0, 3, 2, 10, 4, 8, 4] and the flip side array([14, 1, 15, 11, 4, 9, 13, 11]
如何更改代码或使用pandas.loc/iloc或numpy切片来继续切片,就像我为整个集合所做的示例一样

我之所以需要它,是因为我需要对前两对进行一个数字的异或运算,然后对第二对三对进行一个单独的数字的异或运算。我想对前两对进行异或运算,并在另一列中设置值,然后对第二对三对进行异或运算,并在另一列中的正确索引位置设置它们的值


提前感谢。

将数据转换为numpy,然后使用True和False布尔值对数组进行索引

有助于将布尔值匹配到what数组的大小

#create array
what = df.what.to_numpy()
what
array([14,  1,  4, 10,  8, 15, 11,  9,  2,  0,  4,  9,  3,  2, 10, 13, 11,
        4,  8,  4], dtype=int64)

#create array of boolean
#ignore first two entries, gimme the next three entries
index = np.array([False,False,True,True,True])

#resize index to match size of what array
index = np.resize(index,what.shape[0])

what[index]
array([ 4, 10,  8,  9,  2,  0,  3,  2, 10,  4,  8,  4], dtype=int64)

#reverse the direction of the boolean
#keep first two entries, ignore next three
what[~index]
array([14,  1, 15, 11,  4,  9, 13, 11], dtype=int64)

谢谢,保持索引大小的能力正是我所需要的。这在我的程序中起了作用,我对它进行了测试。再次感谢