来自多索引数据的堆叠图
Posted
技术标签:
【中文标题】来自多索引数据的堆叠图【英文标题】:Stacked plots from a multi-index data 【发布时间】:2019-05-08 23:37:47 【问题描述】:我知道如何绘制这样的图:
SEASON1 SEASON2 SEASON3
area
A 299.0 2.0 257.0
B 13.0 33.0 198.0
C 22044.0 2.0 22.0
使用
df.plot(kind='bar', stacked=True, rot=90, edgecolor='black')
df.T.plot(kind='bar', stacked=True, rot=0, edgecolor='black')
导致:
stacked
transposed stacked
我很难为下面的df
获得相同(甚至更好看)的图,它代表原始的df
,但更优雅地制作了here。
【问题讨论】:
【参考方案1】:您要做的是取消堆叠数据框,并更改列的名称。
你可以这样做:
df.unstack()
.rename(columns =
"2016Q1" : "Season 1",
"2016Q2" : "Season 2",
"2016Q3" : "Season 3",
)
您可以在文档中找到有关 unstack 的作用以及它是如何做的示例。至于rename 方法,它需要一个映射来将你的名字从某个东西转换为其他东西。
我没有尝试让您的示例工作,但我从上面的 unstack 文档中举了一个示例。
index = pd.MultiIndex.from_tuples([('one', 'a'), ('one', 'b'),
('two', 'a'), ('two', 'b')])
df = pd.DataFrame( np.arange(1.0, 5.0), index=index, columns=['hi'])
print(df)
# hi
# one a 1.0
# b 2.0
# two a 3.0
# b 4.0
df = df.unstack(level = -1)
.rename(columns =
"a" : "Season 1",
"b" : "Season 2"
)
print(df)
# hi
# Season 1 Season 2
# one 1.0 2.0
# two 3.0 4.0
可能有更好的方法来处理 DataFrame 上方的“hi”,但您可以 select
它,它会消失。
print( s['hi'] )
Season 1 Season 2
one 1.0 2.0
two 3.0 4.0
【讨论】:
甜蜜。经测试。在职的!所以我的结论是,最好的做法可能是不处理原始的多索引df
对吗?如果是这样,我会去将答案标记为已接受。
@KyleDickson 好吧,我没有对这个主题进行很多研究,但考虑一下,通常情节是 2D 的,而 DataFrame 是 2D 对象。多索引对于处理 2D+ 数据很有用。我不认为 pandas 多索引可以处理 3D 级别的图。我认为这与最佳实践或其他任何东西无关。
@KyleDickson 如果您查看this answer,您会发现您可以决定在不同的轴上绘制多索引。这将是一个不同的选择。 :) 在这里,您不应该考虑最佳实践,而是考虑可能性:我可以将 3D 对象插入 2D 绘图仪吗? :p以上是关于来自多索引数据的堆叠图的主要内容,如果未能解决你的问题,请参考以下文章