0 / 0 / 0
Регистрация: 07.02.2018
Сообщений: 5

Pandas. Dataframe. sns.heatmap - Отрисовка результата

09.07.2020, 22:04. Показов 12147. Ответов 2

Студворк — интернет-сервис помощи студентам
Ребята, выручайте. Несколько дней голову ломаю, не могу решить проблему.В питоне я новичок.
Код пишу в Notebook Jupyter

Вообщем вот сама задача:

Task 5:
1) Разбейте расходы (отрицательные значения сумм) на 5 бакетов amount_bucket равного объёма (с помощью pd.qcut), разбив все траты на категории 'Very High', 'High', 'Middle', 'Low', 'Very Low'. (*)

2) Оставшиеся неотрицательные траты отнесите к категории 'Income'. (воспользуйтесь функцией .cat.add_categories('Income') для того, чтобы добавить новую категорию 'Income' к категориям 'Very High', 'High', 'Middle', 'Low', 'Very Low', а затем заполните пустые значения новой категорией).

3) Из поля tr_datetime выделите час tr_hour, в который произошла транзакция, как первые 2 цифры до ":". (**)

4) После этого постройте сводную таблицу, значениями в которой является пол gender, индексы - tr_hour, столбцы - amount_bucket.

5) Отрисуйте полученные результаты, передав их в функцию plot_pivot_table, расположенную ниже.

Пояснения:
(*) Обратите внимание, что в категории Very High Должны оказаться максимальные по модулю отрицательные транзакции.
(**) Например, для строки "0 10:23:26" час будет равен 10, а для строки "6 07:08:31"- 07. Можно воспользоваться функциями str.split() или str.find() и функцией .apply(lambda x: x[])

Вот то,что я написал:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#Изначально имеется csv таблица с кучей записей, ее читаю во frame. Дальше все по заданию
 
otric = frame[frame.amount<0].amount
 
frame['amount_bucket'] = pd.qcut(otric,5,labels=['Very High','High','Middle','Low','Very Low'])
frame['amount_bucket'] = frame['amount_bucket'].cat.add_categories('Income').fillna('Income') 
 
hours = frame['tr_datetime'].apply(lambda x: x.split()[1].split(':')[0])
amount_bucket = frame['amount_bucket']
amount_bucket = np.array(amount_bucket.values)
gender = frame['gender']
 
 
data = {'gender' : gender.values,
        'amount_bucket' : amount_bucket}
 
frameNew = pd.DataFrame(data,index=hours.values,columns=['gender','amount_bucket'])
frameNew .gender = frameNew .gender.astype(float)
frameNew .index = frameNew .index.astype(float)
 
 
frameNew = frameNew [(frameNew .gender==1.0) | (frameNew .gender==0.0)]
 
 
def plot_pivot_table(pivot_table):
    plt.figure(figsize=(9, 11))
    sns.heatmap(pivot_table, cmap="YlGnBu", annot=True, 
                fmt='.3g', annot_kws={"size": 14, "fontsize": 14})
    plt.xticks(fontsize=15)
    plt.yticks(rotation=0, fontsize=15)
    plt.xlabel('Bucket', size=18)
    plt.ylabel('Hour', fontsize=18)
    plt.title('Gender analysis per bucket and hour', fontsize=20)
    plt.show()
 
plot_pivot_table(frameNew)
В конце выбивает ошибку : 'TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

В инете пишут,что из-за того,что один из столбцов - не число. И действительно,если убрать 'amount_bucket' отсюда frameNew = pd.DataFrame(data,index=hours.values,col umns=['gender','amount_bucket']) ,то вроде какой-то график отображается, но мне по заданию этот столбец необходим. Я без понятия что делать, вроде все по заданию сделал - но не работает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2020, 22:04
Ответы с готовыми решениями:

Pandas, dataframe - добавление новых строк с сохранением результата прошлых расчетов
Здравствуйте спецы, помогите :'( Есть DataFrame: можно ли реализовать, чтобы при ручной смене 'good1' на 'good2' Результаты первого...

Dataframe pandas
Всем привет! Есть dataframe книги. Автор1 книга 1 Автор 2 книга 2 Автор 1 книга 3 Как можно сформировать xml файл с...

Pandas Dataframe
я импортирую фрейм данных из excel. Столбец 1 установлен как индекс. Я хочу проверить в индекс (Столбец 1) пустой ячейке с помощью цикла...

2
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 3
12.01.2021, 15:16
Вы не правильно строите сводную таблицу.
индексы - это часы
столбы - это значения столбца mount_bucket (low, high и т.д.)
А значения столбцов это гендер

Нужно использовать функцию pivot_table()
0
0 / 0 / 0
Регистрация: 26.01.2021
Сообщений: 1
26.01.2021, 14:55
Я тоже пока "салага".
Написал так.

df['tr_hour']=[int(s[1][:2]) for s in df['tr_datetime'].str.split(' ')]

df['amount_backet']=pd.qcut(df[df.amount<0].amount,5,labels=['Very High','High','Middle','Low','Very Low'])
df['amount_backet']=df['amount_backet'].cat.add_categories('Income').fillna('In come')

plot_pivot_table(df.pivot_table(index='t r_hour',columns='amount_backet',values=' gender'))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2021, 14:55
Помогаю со студенческими работами здесь

Pandas dataframe
Доброго дня форумчане. Возник следующий вопрос. Есть у меня таблица, которую необходимо &quot;перевернуть&quot;. Так dataframe...

Pandas. Объединить DataFrame
Приветствую всех! Коллеги, подскажите. Я спарсил xml файл с помощью xmltodict. Получил два датафрейма (пришлось делать два из-за...

Выборка в DataFrame Pandas
Подскажите пожалуйста с задачей, не выходит сделать выборку, как в задании в DataFrame Pandas. 1.Оставьте в выборке только те...

Сложные структуры Pandas DATAFRAME
Здраствуйте уважаемые знатоки! Подскажите пожалуйста способ при котором можно обработать нижеследующую структуру. Общий смысл просто...

Сравнение Dataframe через Pandas
Добрый вечер уважаемые форумчане! На данный момент нахожусь на начальном этапе обучения языка Python 3 версии. Мне необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru