Манипуляции с индексом данных на основе значений из другого столбца - PullRequest
2 голосов
/ 05 марта 2020

Предположительно, у меня есть фрейм данных, который в настоящее время содержит такие данные:

   T week
0  T-1
1  T-1
2  T-1
3  T-1
4  T-2
5  T-2
6  T-2
7  T-3
8  T-3
9  T-3
10 T-3

Я хочу сгруппировать индекс таким образом, чтобы он соответствовал T-группе, с которой я имею дело, например, это это тот фрейм данных, который я хочу:

   T week
1  T-1
2  T-1
3  T-1
4  T-1
1  T-2
2  T-2
3  T-2
1  T-3
2  T-3
3  T-3
4  T-3

Обратите внимание, как индекс начинается снова с 1 (вместо 0), когда появляется новая T-группа.

Я пытался закодировать это, но на самом деле это не сработало. Могли бы помочь!

import os,xlrd,pandas as pd

df = pd.read_excel(r'dir\file.xlsx')
book = xlrd.open_workbook(r'dir\file.xlsx')
sheet = book.sheet_by_name('Sheet1')

t_value = None
next_t = None
tabcount = 0
idx = 1
i = 1

while i!=sheet.nrows:
    t_value = df['T Week'][i]
    next_t = df['T Week'][i+1]
    if t_value == next_t:
        tabcount+=1
        df.at[i,'Num'] = idx
        idx+=1
    else:
        idx = 0
        df.at[i, 'Num'] = idx
    i+=1

1 Ответ

3 голосов
/ 05 марта 2020

Используйте groupby и cumcount. Мы все будем использовать add, чтобы отрегулировать счет в 1:

df.index = df.groupby('T week').cumcount().add(1)

out]

  T week
1    T-1
2    T-1
3    T-1
4    T-1
1    T-2
2    T-2
3    T-2
1    T-3
2    T-3
3    T-3
4    T-3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...