У меня есть большой набор данных, в котором индекс для столбцов имеет формат даты. Чтобы объяснить свою проблему, я создаю аналогичный набор данных, как показано ниже:
import pandas as pd
Cities = ['San Francisco', 'Los Angeles', 'New York', 'Huston', 'Chicago']
Jan = [10, 20, 15, 10, 35]
Feb = [12, 23, 17, 15, 41]
Mar = [15, 29, 21, 21, 53]
Apr = [27, 48, 56, 49, 73]
data = pd.DataFrame({'City': Cities, '01/01/20': Jan, '02/01/20': Feb, '03/01/20': Mar, '04/01/20': Apr})
print (data)
City 01/01/20 02/01/20 03/01/20 04/01/20
0 San Francisco 10 12 15 27
1 Los Angeles 20 23 29 48
2 New York 15 17 21 56
3 Huston 10 15 21 49
4 Chicago 35 41 53 73
Я хочу построить график данных для каждого города как функцию времени. Вот моя попытка:
import matplotlib.pyplot as plt
cols = data.columns
dates = data.loc[:, cols[1:]].columns
San_Francisco = []
Los_Angeles = []
New_York = []
Huston = []
Chicago = []
for i in dates:
San_Francisco.append(data[data['City'] == 'San Francisco'][i].sum())
Los_Angeles.append(data[data['City'] == 'Los Angeles'][i].sum())
New_York.append(data[data['City'] == 'New York'][i].sum())
Huston.append(data[data['City'] == 'Huston'][i].sum())
Chicago.append(data[data['City'] == 'Chicago'][i].sum())
plt.plot(dates, San_Francisco, label='San Francisco')
plt.plot(dates, Los_Angeles, label='Los Angeles')
plt.plot(dates, New_York, label='New York')
plt.plot(dates, Huston, label='Huston')
plt.plot(dates, Chicago, label='Chicago')
plt.legend()
Результаты - это то, что я хочу, однако для большого набора данных мой подход неэффективен. Как мне его ускорить? Также для раздела построения графиков у меня есть большие ряды городов, и ручное кодирование названий утомительно; есть способ лучше?
Спасибо