来自分组数据的直方图的 bin 值

bin value of histograms from grouped data

我是 Python 的初学者,我正在制作每个出发小时的行驶距离的单独直方图。 Data I'm using, about 2500 rows of this. Distance is float64, the Departuretime is str. 但是,为了进行进一步的计算,对于所有直方图,我想在直方图中获取每个 bin 的值。

到目前为止,我有以下内容:

    df['Distance'].hist(by=df['Departuretime'], color = 'red', 
            edgecolor = 'black',figsize=(15,15),sharex=True,density=True)

在我的例子中,这创建了一个包含 21 个小直方图的图形。 Histogram output I'm receiving. 在所有这些直方图中,我想知道每个条形图的 y 轴值,最好是在一个数据框中,距离分箱为行,小时数为列。

对于单个直方图,我会在整行前面粘贴 counts, bins, bars = ,变量 counts 将包含我要查找的数据,但是,在这种情况下它不起作用.

理想情况下,我想要每个直方图的数据框或某种列表,其中包含 bin 的密度值。我希望有人能帮助我!非常感谢!

首先,请注意,您生成的不同直方图中使用的箱子没有相同的边(您可以看到这一点,因为您使用的是 sharex=True 并且生成的条形图不相同具有相同的宽度),在所有情况下您都会得到 10 个箱子(默认值),但它们不是相同的 10 个箱子。 这使得不可能以任何有意义的方式将它们全部组合在一个 table 中。您可以提供一个固定的 bin 边缘列表作为 bins 参数来对此进行标准化。

或者,我建议您计算一个新列来描述每行属于哪个 bin,这样我们也统一了 bins 计算。 您可以使用 cut 函数执行此操作,它还让您可以像使用 hist.

一样自由地选择 bin 的数量或特定的 bin 边缘
df['DistanceBin'] = pd.cut(df['Distance'], bins=10)

然后,您可以使用 pivot_table 获得 table,其中 DistanceBinDeparturetime 的每个组合的计数分别作为您要求的行和列。

df.pivot_table(index='DistanceBin', columns='Departuretime', aggfunc='count')