#python #pandas #counter
Вопрос:
У меня есть фрейм данных pandas с несколькими столбцами, и я хочу создать счетчик, который последовательно подсчитывает 4 строки и 6 строк. Я бы хотел, чтобы это выглядело как кадр данных ниже:
Указатель | счетчик |
---|---|
0 | 1 |
1 | 1 |
2 | 1 |
3 | 1 |
4 | 2 |
5 | 2 |
6 | 2 |
7 | 2 |
8 | 2 |
9 | 2 |
10 | 3 |
11 | 3 |
12 | 3 |
13 | 3 |
Как вы можете видеть, первые 4 значения в counter
столбце равны 1, затем следующие 6 значений равны 2, затем снова следующие 4 значения равны 3.
Комментарии:
1. каковы определения 4 строк и 6 строк? ваш вопрос очень двусмыслен. все, что я вижу, это 4 строки со значением 1, за которыми следуют 6 строк со значением 2, за которыми следуют 4 строки со значением 3. Не знаю, как это связано с входным фреймом данных
2. Извините, я добавил столбец индекса, чтобы было понятнее. Например, если у меня есть фрейм данных, из индекса я хочу создать счетчик, который увеличивается на 1, когда он читает 4 строки, затем снова увеличивается на 1, когда он читает 6 строк, затем увеличивается на 1, когда он читает 4 строки (затем снова на 1 для 6 строк) и так далее до последней строки моего фрейма данных. Это понятнее?
Ответ №1:
Ваш вопрос немного ясен после редактирования, вы можете создать пустой список и переменную счетчика, затем выполнить итерацию по диапазону количества строк, увеличив его на 10, т. е. (4 6), затем на каждой итерации создавать требуемые списки длиной 4 и 6 со счетчиком и счетчиком 1, добавлять их в результирующий список. Наконец, возьмите срез из списка результатов сначала значения df.shape[0] (потому что у него может быть несколько больше значений, чем у df.shape[0]), и назначьте его новому столбцу df[‘счетчик’].
result = []
counter = 1
for i in range(0, df.shape[0], 10):
result = [counter]*4
counter = 1
result = [counter]*6
counter = 1
df['counter'] = result[:df.shape[0]]
# result [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]
выход:
index counter
0 0 1
1 1 1
2 2 1
3 3 1
4 4 2
5 5 2
6 6 2
7 7 2
8 8 2
9 9 2
10 10 3
11 11 3
12 12 3
13 13 3