我有一个数据集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")
对于拥有很多价值的用户,它始终保持最大价值。
答案 0 :(得分:1)
我不确定这是您想要的还是要首先为每个用户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')
输出
如果要绘制每个用户的平均值,请使用以下代码:
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')
输出
如果您不对它进行排序或分组,该怎么办:显示所有条形,但是对于相同的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)
输出