绘制分组数据帧

2024-10-01 02:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了几个小时寻找答案,但似乎找不到答案。你知道吗

长话短说,我有一个数据帧。以下代码将生成有问题的数据帧(尽管使用随机数匿名):

variable1 = ["Attribute 1","Attribute 1","Attribute 1","Attribute 1","Attribute 1","Attribute 1","Attribute 2","Attribute 2",
         "Attribute 2","Attribute 2","Attribute 2","Attribute 2","Attribute 3","Attribute 3","Attribute 3","Attribute 3",
         "Attribute 3","Attribute 3","Attribute 4","Attribute 4","Attribute 4","Attribute 4","Attribute 4","Attribute 4",
         "Attribute 5","Attribute 5","Attribute 5","Attribute 5","Attribute 5","Attribute 5"]


variable2 = ["Property1","Property2","Property3","Property4","Property5","Property6","Property1","Property2","Property3",
         "Property4","Property5","Property6","Property1","Property2","Property3",
         "Property4","Property5","Property6","Property1","Property2","Property3","Property4",
         "Property5","Property6","Property1","Property2","Property3","Property4","Property5","Property6"]

number = [93,224,192,253,186,266,296,100,135,169,373,108,211,194,164,375,211,71,120,334,59,164,348,50,249,18,251,343,172,41]

bar = pd.DataFrame({"variable1":variable1, "variable2":variable2, "number":number})

bar_grouped = bar.groupby(["variable1","variable2"]).sum()

结果应该是这样的:

enter image description here

第二个是:

enter image description here

我一直在尝试用条形图来绘制它们,把属性作为组,把不同的属性作为条形图。与此类似(但在Excel中手动绘制)。我更喜欢在分组数据场中这样做,这样就可以用不同的分组进行绘图,而不需要每次都重置索引。你知道吗

enter image description here

我希望这是清楚的。你知道吗

非常感谢您的帮助。你知道吗

谢谢!:)


Tags: 数据答案number绘制barattribute条形图variable1
3条回答

首先使用^{}

bar_grouped['number'].unstack(0).plot(kind='bar')

[输出]

enter image description here

我不会费心去创建你的groupby结果(因为你没有聚合任何东西)。这是一个pivot


bar.pivot('variable2', 'variable1', 'number').plot(kind='bar')

plt.tight_layout()
plt.show()

enter image description here


如果需要聚合,您仍然可以从bar开始使用pivot_table

bar.pivot_table(index='variable2', columns='variable1', values='number', aggfunc='sum')

下面的代码将执行您试图建立的操作:

import numpy as np
import matplotlib.pyplot as plt

# set width of bar
barWidth = 0.25
f = plt.figure(figsize=(15,8))

bars={}
bar_pos={}
for i,proprty in enumerate(bar_grouped.unstack().columns.droplevel(0).tolist()):
    bars[i] = bar_grouped.unstack()['number',proprty].tolist()
    if(i==0):
        bar_pos[i]=2*np.arange(len(bars1))
    else:
        bar_pos[i]=[x + barWidth for x in bar_pos[i-1]] 
    plt.bar(bar_pos[i], bars[i], width=barWidth, edgecolor='white', label=proprty, figure=f)

# Add xticks on the middle of the group bars
plt.xlabel('group', fontweight='bold')
plt.xticks([2*r + 2*barWidth for r in range(len(bars[0]))], bar_grouped.unstack().index.tolist())
# plt.figure(figsize=(10,5))

# Create legend & Show graphic
plt.legend(loc=0)
plt.show()

我从here获取了解决方案,并根据您的需要对其进行了修改。希望这有帮助!你知道吗

相关问题 更多 >