Барплот в матплотлибе использует среднее? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть набор данных df:

users  number   
user1   1          
user2   34       
user3   56      
user4   45      
user5   4
user1   3
user5   11
user1   3

при создании барплота:

plt.bar(x['users'], x['number'].sort_values(ascending=False), color="blue")

Требуется ли среднее значение каждого user в столбце number во время графика? Что если я хочу, чтобы сумма всех чисел в столбце number отображалась на графике в порядке убывания?

Я пробовал это:

plt.bar(x['users'], x['number'].sum().sort_values(ascending=False), color="blue")

, что дает:

AttributeError: 'numpy.float64' object has no attribute 'sort_values'

код:

import pandas as pd
df = pd.DataFrame({'number': [10,34,56,45,33],
'user': ['user1','user2','user3','user4','user1']})
#index=['user1','user2','user3','user4','user1'])
plt.bar(df['user'], df['number'], color="blue")

enter image description here

Он всегда сохраняет наибольшее значение для пользователя, у которого много значений.

1 Ответ

0 голосов
/ 11 сентября 2018

Я не уверен, что это то, что вам нужно ИЛИ вы хотите сначала groupby значения для каждого пользователя, а затем отобразить общее число в порядке убывания.

x = x.sort_values('number',ascending=False)
plt.bar(range(len(x['users'])), x['number'], color="blue")
plt.xticks(range(len(x['users'])), x['users'])
plt.ylabel('Numbers')

Вывод

enter image description here

Если вы хотите построить среднее значение для каждого пользователя, используйте следующий код:

x1 = x.groupby('users').mean().reset_index()
plt.bar(range(len(x1)), x1['number'], color="blue")
plt.xticks(range(len(x1)), x1['users'])
plt.ylabel('Mean')

Вывод

enter image description here

Что, если вы не сортируете или не группируете по : присутствуют все столбцы, кроме васне вижу разных баров для одного и того же значения x, потому что alpha=1 по умолчанию.Я использовал alpha=0.2, чтобы подчеркнуть мою точку зрения.Теперь вы видите, что на user1 есть два бара друг за другом.

import pandas as pd
df = pd.DataFrame({'number': [10,34,56,45,51], 'user': 'user1','user2','user3','user4','user1']})
plt.bar(df['user'], df['number'], color="blue", linewidth =2, edgecolor='black' , alpha = 0.2)

Выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...