Имена столбцов после переноса кадра данных - PullRequest
0 голосов
/ 01 октября 2019

У меня есть небольшой фрейм данных - шесть строк (не считая заголовка) и 53 столбца (название магазина и остальные еженедельные продажи за прошедший год). Каждая строка содержит конкретный магазин, а в каждом столбце - название магазина и продажи за каждую неделю. Мне нужно транспонировать данные таким образом, чтобы недели отображались в виде строк, магазины - в виде столбцов, а их продажи - в виде строк.

Чтобы сгенерировать входные данные:

df_store = pd.read_excel(SourcePath+SourceFile, sheet_name='StoreSales', header=0, usecols=['StoreName'])
# Number rows of all irrelevant stores.
row_numbers = [x+1 for x in df_stores[(df_store['StoreName'] != 'Store1') & (df_store['StoreName'] != 'Store2')
 & (df_store['StoreName'] !='Store3')].index]

# Read in entire Excel file, skipping the rows of irrelevant stores.
df_store = pd.read_excel(SourcePath+SourceFile, sheet_name='StoreSales', header=0, usecols = "A:BE", 
    skiprows = row_numbers, converters = {'StoreName' : str})

# Transpose dataframe
df_store_t = df_store.transpose()

MyВыходные данные помещают порядковые номера над каждым именем магазина (от 0 до 5), а затем каждый столбец начинается как StoreName (над неделей), а затем - каждое имя магазина. Тем не менее, я не могу манипулировать ими по их именам.

Есть ли способ очистить эти индексные номера, чтобы я мог напрямую работать с получающимися именами столбцов (например, переименовать «StoreName» в «WeekEnding» и сделать ссылкук каждому столбцу магазина («Store1», «Store2» и т. д.?)

1 Ответ

1 голос
/ 01 октября 2019

IIUC, сначала нужно set_index, затем транспонировать, T:

См. Этот пример:

df  = pd.DataFrame({'Store':[*'ABCDE'],
                    'Week 1':np.random.randint(50,200, 5), 
                    'Week 2':np.random.randint(50,200, 5),
                    'Week 3':np.random.randint(50,200, 5)})

Входной кадр данных:

  Store  Week 1  Week 2  Week 3
0     A      99     163     148
1     B     119      86      92
2     C     145      98     162
3     D     144     143     199
4     E      50     181     177

Теперь установите set_index и транспонируйте:

df_out = df.set_index('Store').T
df_out

Вывод:

Store     A    B    C    D    E
Week 1   99  119  145  144   50
Week 2  163   86   98  143  181
Week 3  148   92  162  199  177
...