我想使用pandas.DataFrame.plot.bar(stacked = True)功能来可视化我的数据帧(见下文)。
选择1个时段,我想要" num"对于每个" Wave"堆叠在电极上#34;电极"。理想情况下,每个时期都将绘制在一个单独的子图中。目前的代码:
one = df[df["Period"]=="1"]
one.plot.bar(stacked=True);
plt.show()
在下面的例子中,这意味着a,b,c,d代表不同的Waves,0-9代表不同的电极。
我认为这是将我的数据框重新排序到plot.bar的期望的问题,但我不确定如何继续。
这是DataFrame的前30行
Electrode Period Wave num
0 7 10 Beta 1
1 8 12 Beta 1
2 15 10 High gamma 1
3 4 10 Theta 1
4 11 4 High gamma 1
5 12 13 High gamma 3
6 11 4 Delta 3
7 11 4 Theta 0
8 14 0 Delta 2
9 14 1 Beta 0
10 11 6 Low gamma 1
11 1 9 Theta 0
12 8 1 Theta 0
13 5 8 Theta 0
14 10 0 Low gamma 2
15 13 12 Alpha 1
16 8 13 Alpha 1
17 10 0 Beta 1
18 7 5 Alpha 2
19 10 3 Theta 0
20 14 6 High gamma 2
21 4 11 Beta 1
22 4 5 Delta 1
23 4 10 High gamma 2
24 10 0 High gamma 3
25 12 4 Alpha 1
26 8 8 Theta 0
27 8 11 Beta 1
28 6 2 Delta 2
29 12 7 Low gamma 3
答案 0 :(得分:1)
我认为需要groupby
并将mean
汇总到unstack
进行重塑:
one = df[df["Period"]==10].groupby(['Electrode','Wave'])['num'].mean().unstack()
one.plot.bar(stacked=True)
对于所有子图:
grouped = df.groupby('Period')
nrows = int(math.ceil(len(grouped)/2.))
fig, axs = plt.subplots(nrows,2, figsize=(12,30))
for (name, df), ax in zip(grouped, axs.flat):
df.groupby(['Electrode','Wave'])['num'].mean().unstack().plot.bar(stacked=True, ax=ax)
答案 1 :(得分:0)
在jezrael启发的错误之后,我找到了这个解决方案:
df[df["Period"]=="1"].pivot_table(values="num", index=["Electrode"], columns="Wave", aggfunc='mean').plot.bar(stacked=True)