Продвинутая нарезка с pandas или numpy для 2 пар и 3 пар в 5 группе - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть таблица pandas ниже, которую можно скопировать / вставить и прочитать с помощью pd.read_clipboard (). Мне нужно взять фрагмент из 2 последовательных значений и 3 последовательных значений. Это список из двух пар, из трех пар, как вы можете видеть по столбцу y1. Итак, 0,1 - пара, затем 2,3,4 - пара, а затем продолжается для каждой 5 группы. Мне нужно нарезать весь список на эти пары. Это группа из 5, где первые 2 - это пара, а следующие три - это пара. Таким образом, 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 / ilo c или numpy, чтобы продолжить нарезку, как мои примеры для всего набора?

Причина в том, что мне нужно это потому, что мне нужно XOR первых двух пар по номеру, а второй три пары по отдельному номеру. Я хотел бы XOR для первых двух пар и установить значение в другом столбце, а затем XOR для вторых трех пар и установить их значения в другом столбце в правильном месте индекса.

Заранее спасибо.

1 Ответ

1 голос
/ 20 апреля 2020

Преобразование данных в numpy, затем использование логических значений True и False для индексации массивов

numpy resize помогает сопоставить логическое значение с размером массива 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...