Как использовать информацию из другого файла, чтобы изменить то, что у меня есть на оси x?

#python #pandas #seaborn

#python #pandas #сиборн

Вопрос:

Прошу прощения за неясное название, но я не знал, как лучше это объяснить. У меня следующая проблема: используя pandas и seaborn, я хочу отобразить некоторую информацию, которая у меня есть в моем наборе данных. Набор данных выглядит следующим образом:

 ParticpantID      ColorID
1                 3
2                 3
3                 4
4                 2
5                 1
6                 1
7                 3
8                 1

 

Теперь я использую:

 sns.set_style('darkgrid')
    sns.countplot( x= "ColorID", data =dataset, palette = "magma" )
    plt.title("Participants per Color")
    plt.show()

 

И я получаю график подсчета. Проблема в том, что у меня есть другой файл, который выглядит следующим образом:

 ColorID      Color
1            Blue
2            Green
3            Red
4            Yellow


 

Каждый раз, когда я запускаю свою программу, я хочу открыть этот второй файл, обработать его и заменить на моей диаграмме подсчета числа 1-2-3-4 правильным названием цвета.
Я не уверен, как это сделать. Я думал об использовании функции xticks(), но я не уверен, как ее реализовать.

Прошу прощения за основной вопрос, но я полный новичок. Заранее большое вам спасибо!

Ответ №1:

Сначала вам нужно обновить свой набор данных с помощью строки, которую вы хотите установить, используя свой набор данных цветов.

Восстановление ваших наборов данных (обратите внимание на set_index ):

 import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

dataset = pd.DataFrame([
    [1,3],
    [2,3],
    [3,4],
    [4,2],
    [5,1],
    [6,1],
    [7,3],
    [8,1],
    ],
    columns=['ParticpantID','ColorID']
).set_index('ParticpantID')

#               ColorID
# ParticpantID         
# 1                   3
# 2                   3
# 3                   4
# 4                   2
# 5                   1
# 6                   1
# 7                   3
# 8                   1

color_df = pd.DataFrame(
    [
        [1, 'Blue'],
        [2, 'Green'],
        [3, 'Red'],
        [4, 'Yellow'],
    ],
    columns=['ColorID', 'Color'],
).set_index('ColorID')

#           Color
# ColorID        
# 1          Blue
# 2         Green
# 3           Red
# 4        Yellow
 

Использование color_df для перевода 'ColorID' в цветную строку в dataset :

 dataset['Color'] = dataset['ColorID'].transform(lambda color: color_df['Color'][color])
 

Печать вашего графика, замена 'ColorID' на 'Color' (новый ключ для строки цвета) в качестве оси x:

 sns.set_style('darkgrid')

sns.countplot(
    x="Color",
    data=dataset,
    palette="magma",
)
plt.title("Participants per Color")
plt.show()
 

введите описание изображения здесь

Ключевой операцией для понимания здесь является transform метод: он позволяет преобразовать (с помощью лямбда-функции) один столбец в другой.

Комментарии:

1. Я думаю, это было бы немного проще, если бы вы использовали .map вместо .transform

2. @mcnew если вы оценили ответ, не могли бы вы подтвердить его и / или проголосовать за него?