熊猫数据框:用分组绘制直方图
Posted
技术标签:
【中文标题】熊猫数据框:用分组绘制直方图【英文标题】:Panda dataframe : plot histogram with grouping 【发布时间】:2021-10-16 23:17:41 【问题描述】:我有以下格式的表格数据:
id value valid
1 0.43323 true
2 0.83122 false
3 0.33132 true
4 0.58351 false
5 0.74143 true
6 0.44334 true
7 0.86436 false
8 0.73555 true
9 0.56534 false
10 0.66234 true
...
我正在尝试绘制这样的直方图
想知道是否有一种方法可以在 panda 数据框中将数值从 .0 到 .1 然后从 .1 到 .2 等进行分组,以表示图像中呈现的数据,用颜色编码条形为 true和错误分别计算。
我正在考虑在字典中创建单独的切片,然后分别计算真/假值。稍后我可以用它创建一个直方图。有没有更好的方法来绘制这样的直方图而不进行所有这些计算?
到目前为止我对 bin 和 cut 的了解:
new_df = df[['value','valid']]
bins = [0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1]
s = new_df.groupby(pd.cut(new_df['value'], bins=bins)).size()
s.plot(kind='bar', stacked=True)
有了这个我可以得到带箱的总计数直方图,我无法为每个条应用“有效”列真/假计数的颜色编码。
【问题讨论】:
如果您不同意结束您的问题:Panda dataframe : plot histogram with grouping 有一个process to reopen a question,它绝对不会删除和重新发布相同的问题。 让我跟着它,它要求我重新发布问题。这篇文章已经有几年了,我想知道是否有更好的方法可以使用新的 python 库来结合这两个问题 您可能会考虑包含已链接的重复项并解释为什么它们不适用或您正在寻找的不同之处。对于那些无法查看已删除问题的人,有问题的重复项是 Binning a column with Python Pandas 和 Pandas - Plotting a stacked Bar Chart。 感谢亨利指出问题。如前所述,这两个问题分别讨论了 binning、groupby 和 count。这个问题的想法是将两种解决方案结合在一起,我很难解决。即:我可以生成箱并用它绘制直方图,但不能用单独的真/假计数对其进行颜色编码 让我添加到目前为止的代码 【参考方案1】:试试:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(123)
df = pd.DataFrame(
"value": np.random.random(1000),
"valid": np.random.choice([True, False], p=[0.7, 0.3], size=1000),
)
df["label"] = pd.cut(df["value"], bins=np.arange(0, 1.01, 0.1))
ax = (
df.groupby(["label", "valid"])
.count()
.unstack()["value"]
.plot.bar(stacked=True, rot=0, figsize=(10, 7))
)
ax.legend(loc="upper center")
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)
_ = ax.set_ylim(0, 150)
输出:
【讨论】:
以上是关于熊猫数据框:用分组绘制直方图的主要内容,如果未能解决你的问题,请参考以下文章
如何按范围对csv文件中的列进行分组并使用python绘制直方图?
R语言使用ggplot2包的快速可视化函数qplot绘制分组直方图(分组颜色设置)实战
想要将 Pandas 数据框绘制为具有 log10 比例 x 轴的多个直方图
R语言使用ggplot2包使用geom_density()函数绘制分组密度图(添加直方图分组颜色配置)实战(density plot)