【问题标题】:Plotting Matplotlib Histogram of one pandas dataframe column with average of another represented by a dot绘制一个 pandas 数据框列的 Matplotlib 直方图,另一列的平均值由一个点表示
【发布时间】:2019-07-27 03:31:12
【问题描述】:

基本上有一个看起来像这样的熊猫数据框:

d = {'Percentage' : [8,20,24,27, 58], 'Assets' : [10,12,53,32,11]}

df = pd.DataFrame(d)

我想创建百分比列的直方图,其中百分比落在 bin 中的频率,我这样做了:

bins = [0,25,50,75,100]

a = sns.FacetGrid(df)

a = a.map(plt.hist, "Percentage", bins=bins)

但是现在我想在直方图中覆盖一个代表 bin 平均资产的点,这是我做不到的。

我知道我可以按它们各自的百分比所属的 bin 对资产列进行分组,然后计算平均值并覆盖另一个图,但我觉得它们必须是另一种方式。

编辑:澄清我所说的垃圾箱的意思

【问题讨论】:

  • 看起来你真的想要一个条形图。确定要直方图吗?
  • 我不确定。我只想计算每个 bin 中的百分比(这就是提出直方图想法的地方),然后是代表每个 bin 的平均资产的东西。
  • 你指的是什么垃圾箱?
  • 对不起,应该让原帖更清楚。我会编辑它。但我的意思是计算Percentage列中的值在0-24,25-49等之间的数量。然后找到每个组的平均资产。

标签: python pandas matplotlib histogram


【解决方案1】:

直方图可以在这里使用,但我认为自己计算它并使用条形图更容易——因为你还必须处理Assets

这个想法是您需要确定每个数据点属于哪个 bin。然后您可以按 bin 和平均值分组以计算您的平均值 Assets。实际上,seaborn 处理得相当好:

df['bins'] = pd.cut(df['Percentage'], bins=bins)
df['count'] = 1

fig, ax1 = plt.subplots()
sns.barplot(data=df, x='bins', y='count', estimator=np.sum, ax=ax1)

ax2 = ax1.twinx()
sns.pointplot(data=df, x='bins', y='Assets', color='m', join=False, ci=None, ax=ax2)

【讨论】:

  • 感谢您的帮助,这正是我想要的。
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2021-03-20
  • 2016-06-11
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
相关资源
最近更新 更多