Python 在5组中,使用熊猫或numpy对2对和3对进行高级切片
我有一个pandas表,下面可以用pd.read_剪贴板复制/粘贴和读取。我需要取2个连续值和3个连续值的切片,这是一个两对,三对的列表, 如第y1列所示。所以0,1是一对,然后2,3,4是一对,然后每5组继续。我需要把整个列表分成两部分。这是一组5个,其中前2个是一对,后3个是一对。 所以14,1是一对,4,10,8是一对,每5对都是一样的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
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)
谢谢,保持索引大小的能力正是我所需要的。这在我的程序中起了作用,我对它进行了测试。再次感谢