当组值不是唯一标识时如何在熊猫中创建堆积条
Posted
技术标签:
【中文标题】当组值不是唯一标识时如何在熊猫中创建堆积条【英文标题】:How to create a stacked bar in pandas when the group values aren't uniquely identified 【发布时间】:2022-01-15 13:25:55 【问题描述】:这个问题可能看起来很简单,但我在任何地方都没有看到这个问题,而且由于我是 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 轴上的相同值像这样堆叠:
我该怎么做?
【问题讨论】:
【参考方案1】: 如果不将数据帧转换为宽格式,则无法做到这一点,只有在组'A'
中的每个值 'R'
都分配了一个标识符时才能做到这一点
在python 3.10
、pandas 1.3.4
、matplotlib 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()
【讨论】:
如您所愿吗? @TrentonMcKinney。感谢您的编辑和时间。 不客气。谢谢你的回答。以上是关于当组值不是唯一标识时如何在熊猫中创建堆积条的主要内容,如果未能解决你的问题,请参考以下文章
饿了么面试官问我如何在分布式系统中创建唯一ID,我这么说怼翻他
饿了么面试官问我如何在分布式系统中创建唯一ID,我这么说怼翻他