Панды: Преобразование кадра данных перед построением графика

#python #pandas

Вопрос:

Я хочу создать горизонтальную гистограмму, однако я думаю, что сначала мне придется использовать этот pivot метод. Текущий фрейм данных состоит из двух строк и множества столбцов:

 Имена не нужны не нужны 2 год1 год2 год3
 Джо 0 0 240.87 2.30 0.85
 Доу 0 0 243,72 2,35 0,84

Чтобы отобразить это в виде гистограммы, я хотел бы сначала преобразовать данные в это:

 Годы Джо Доу1

240.87 243.72 год2 2.30 2.35
год3 .85 .84 

Таким образом, у меня могут быть две горизонтальные гистограммы, наложенные друг на друга, где по оси y указаны годы, а по оси x-номера данных.

Ответ №1:

На самом деле достаточно простого переноса. В этом нет необходимости pivot .

 df1 = df.set_index('Names')[['year1','year2','year3']].T

print(df1)
 
           Joe     Doe
year1  240.87  243.72
year2    2.30    2.35
year3    0.85    0.84
 

Ответ №2:

Я немного изменил значения, чтобы отображались столбики.

Ты можешь сделать что-то подобное

 import pandas as pd
import matplotlib.pyplot as plt

columns = ['Names', 'year1', 'year2', 'year3']
df = pd.read_csv('data.csv', usecols=columns)
transpose_df = df.set_index('Names').transpose()
# If names are not unique, you might want to group by and aggregate
# transpose_df = df.groupby('Names').mean().transpose()
print(transpose_df)
transpose_df.plot.barh()
plt.show()

 

Какие отпечатки

 Names     Joe     Doe
year1  240.87  243.72
year2   60.00   20.00
year3  100.00  150.00
 

И производит

HBar

CSV, который я использовал

 Names,not_needed,not_needed2,year1,year2,year3
Joe,0,0,240.87,60,100
Doe,0,0,243.72,20,150