Как сбросить ненужные уровни после использования pivot_table? - PullRequest
0 голосов
/ 24 октября 2019

Я хотел бы правильно структурировать фрейм данных панд, чтобы я мог построить его по своему усмотрению. Насколько я могу определить, лучший способ структурировать данные - это использовать сводную таблицу, но у меня возникают проблемы с тем, что, я думаю, я буду называть «остаточными уровнями».

# Trying to determine why pivot table keeps level "Test 1" in data frame

import itertools as it
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Generate some data; covert dict to dataframe
MyDates = list(it.repeat(['1/1/19', '2/1/19', '3/1/19', '4/1/19', '5/1/19'],
                         5))
MyDates_flat = [item for sublist in MyDates for item in sublist]
MyDates_flat.sort()

SampleSites = ['Site 1', 'Site 2', 'Site 3', 'Site 4', 'Site 5'] * 5

Test1 = list(np.random.randint(0, 10, 25))
Test2 = list(np.random.randint(0, 10, 25))
Test3 = list(np.random.randint(0, 10, 25))

MyData = {'Date': MyDates_flat, 'Sample Location': SampleSites,
          'Test 1': Test1, 'Test 2': Test2, 'Test 3': Test3}
DF1 = pd.DataFrame(MyData)

Однажды сводкатаблица используется, «Тест 1» остается и не позволяет мне строить столбцы для Site 1, Site 2 и т. д.

# Filter for columns that you want to eventually plot; use pivot_table to -
# restructure data for plotting.
DF2 = DF1.filter(['Date', 'Sample Location', 'Test 1'], axis=1)
DF_Test1 = DF2.pivot_table(index='Date',
                           columns='Sample Location')

# How to get rid of "Test 1" over Site columns?

# Plot each site as its own series (line)
fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
plt.plot(DF_Test1.index, DF_Test1['Site 1'], color='red')
plt.plot(DF_Test1.index, DF_Test1['Site 2'], color='blue')
plt.plot(DF_Test1.index, DF_Test1['Site 3'], color='green')
# etc.

Если я экспортирую фрейм данных DF_Test1 как файл Excel и удаляюВ строке с «Тестом 1» я могу построить столбцы для Сайта 1, Сайта 2 и т. д. Как я могу сделать это в Python? Я пытался использовать dropplevel и drop без успеха. Спасибо.

...