Как подсчитать каждые x записей и пометить вхождение этой последовательности значением в кадре данных pandas? - PullRequest
0 голосов
/ 26 июня 2019

Я хочу создать столбец C (на основе B), в котором будет отсчитываться каждое начало серии из 4 записей в B (или информационного кадра в целом). У меня есть следующий кадр данных панд:

A B 
1 100
2 102
3 103
4 104
5 105
6 106
7 108
8 109
9 110
10 112
11 113
12 115
13 116
14 118
15 120
16 121

Я хочу создать следующий столбец C:

A C
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 2
9 3
10 3
11 3
12 3
13 4
14 4
15 4
16 4

В этом столбце C должна учитываться каждая серия из 4 записей кадра данных.

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

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Использование:

df['C'] = df.index // 4 + 1

Учитывая, что у вас довольно простой фрейм данных, можно предположить, что у вас есть общий индекс, который является RangeIndex объектом.

В вашемНапример, это будет выглядеть так:

df.index
#RangeIndex(start=0, stop=16, step=1)

При этом значения этого индекса следующие:

df.index.values
#array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15], dtype=int64)

Преобразование такого массива в желаемый вывод выполняется по формуле:

x // 4 + 1

Где // - оператор, используемый для деления этажа .

1 голос
/ 26 июня 2019

Общее решение - создать массив numpy на np.arange, затем использовать целочисленное деление на 4 и добавить 1, потому что число питонов от 0:

df['C'] = np.arange(len(df)) // 4 + 1
print (df)
     A    B  C
0    1  100  1
1    2  102  1
2    3  103  1
3    4  104  1
4    5  105  2
5    6  106  2
6    7  108  2
7    8  109  2
8    9  110  3
9   10  112  3
10  11  113  3
11  12  115  3
12  13  116  4
13  14  118  4
14  15  120  4
15  16  121  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...