【问题标题】:Plot mean of subset of a Panda dataframe绘制 Panda 数据帧子集的平均值
【发布时间】:2019-08-19 19:00:25
【问题描述】:

假设有一大组数据,比如

   Height (m)  My data
0          18      5.0
1          25      6.0
2          10      1.0
3          13      1.5
4          32      8.0
5          26      6.7
6          23      5.0
7           5      2.0
8           7      2.0

我想绘制“我的数据”的平均值(如果可能的话,还有标准偏差)作为高度的函数,在 [0,5),[5,10),[10, 15) 等等。

有什么想法吗?我尝试了不同的方法,但它们都不起作用

【问题讨论】:

  • 花点时间检查您的格式,这是原始 html,而不是数据。之后,你有没有尝试过 groupby 和 cut/qcut?
  • 请参阅this post 了解如何制作好的 pandas 示例
  • 你可以创建一个像df[['height_bucket']] = df[['Height (m)']]]/5这样的列然后在这个列上使用groupby?
  • @G.Anderson 我知道,这只是为了展示示例。否则,我必须上传 110 Mb 的文件
  • @MatMorPau22,我希望您不介意我对您的问题进行编辑:我使用 pd.read_html() 将您发布的原始 HTML 转换为示例数据的纯文本表示形式。

标签: python pandas plot statistics


【解决方案1】:

如果我理解正确的话:

# Precompute bins for pd.cut
bins = list(range(0, df['Height (m)'].max() + 5, 5))

# Cut Height into intervals which exclude the right endpoint, 
# with bin edges at multiples of 5
df['HeightBin'] = pd.cut(df['Height (m)'], bins=bins, right=False)

# Within each bin, get mean, stdev (normalized by N-1 by default),
# and also show sample size to explain why some std values are NaN
df.groupby('HeightBin')['My data'].agg(['mean', 'std', 'count'])
            mean       std  count
HeightBin
[0, 5)       NaN       NaN      0
[5, 10)     2.00  0.000000      2
[10, 15)    1.25  0.353553      2
[15, 20)    5.00       NaN      1
[20, 25)    5.00       NaN      1
[25, 30)    6.35  0.494975      2
[30, 35)    8.00       NaN      1

【讨论】:

    【解决方案2】:

    如果我理解正确,这就是你想要做的:

    import pandas as pd
    import numpy as np
    
    bins = np.arange(0, 30, 5) # adjust as desired
    
    df_stats = pd.DataFrame(columns=['mean', 'st_dev']) # DataFrame for the results
    df_stats['mean'] = df.groupby(pd.cut(df['Height (m)'], bins, right=False)).mean()['My data']
    df_stats['st_dev'] = df.groupby(pd.cut(df['Height (m)'], bins, right=False)).std()['My data']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2020-04-07
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多