当组值未唯一标识时,如何在 pandas 中创建堆积条

How to create a stacked bar in pandas when the group values aren't uniquely identified

这个问题可能看起来很简单,但我在任何地方都没有见过这个问题,因为我是 python 的新手,所以我不知道如何解决这个问题。

我正在尝试根据此数据框绘制堆积条形图:

 A   R
208  1
208  5
208  2
210  9
213  5
213  8
213  6
213  3
213  3
215  6
222  4

我尝试使用以下代码:

df.set_index('A', inplace=True)
df['R'].plot.bar(legend=True, stacked=True)

这导致

但我希望 x 轴上的相同值像这样堆叠:

我该怎么做?

  • 如果不将数据帧转换为宽格式就无法完成此操作,只有在组 'A' 中的每个值 'R' 都分配了一个标识符时才能完成此操作
  • 测试于 python 3.10pandas 1.3.4matplotlib 3.5.0
import pandas as pd
import matplotlib.pyplot as plt

# sample dataframe
data = {'A': [208, 208, 208, 210, 213, 213, 213, 213, 213, 215, 222], 
        'R': [1, 5, 2, 9, 5, 8, 6, 3, 3, 6, 4]}
df = pd.DataFrame(data, index='A')

# create a new column adding a unique identifier
df = df.assign(cols=df.groupby(level='A').cumcount())

# display(df)
     R  cols
A           
208  1     0
208  5     1
208  2     2
210  9     0
213  5     0
213  8     1
213  6     2
213  3     3
213  3     4
215  6     0
222  4     0

# pivot the dataframe into a wide form which easily plots
dfp = df.pivot(columns='cols', values='R')

# display(dfp)
cols    0    1    2    3    4
A                            
208   1.0  5.0  2.0  NaN  NaN
210   9.0  NaN  NaN  NaN  NaN
213   5.0  8.0  6.0  3.0  3.0
215   6.0  NaN  NaN  NaN  NaN
222   4.0  NaN  NaN  NaN  NaN

# plot 
ax = dfp.plot.bar(stacked=True, legend=False, rot=0)
plt.show()