【问题标题】:How to do Gaussian fit and FWHM measurement by group?如何按组进行高斯拟合和 FWHM 测量?
【发布时间】:2022-01-16 18:49:24
【问题描述】:

我有一个pandas.DataFrame 的表格。我将向您展示一个简单的示例。(实际上,它由数亿行数据组成。)。我想在按 ID 分组后测量 DIFFGaussian fitFWHM

df = 
X ID diff

1 52 11.0
12 85 -102.0
17 42 43.0
18 2 81.0
59 122 -10.0
78 21 -43.0
96 144 -6.0
101 76 -56.0
113 119 -75.0
120 82 4.0
134 83 11.0
139 39 16.0
152 12 -61.0
169 139 -124.0
170 37 26.0
173 35 -190.0
185 103 -64.0
192 122 -72.0
193 108 51.0
195 88 -30.0
199 43 -100.0
209 89 -154.0
243 32 94.0
246 138 -25.0
250 50 2.0
258 53 167.0
261 42 -23.0
272 69 -64.0
276 95 -14.0
279 25 -115.0
286 79 -65.0
288 82 2.0
332 43 213.0
  1. “df[['ID','diff']].groupby(['ID'])”之后怎么办?
  2. 实际上,“ID”的范围是 1 到 144。
  3. 图形图像不是必需的。
  4. 我只需要结果值。
  5. 上面的例子是整体中的一些数据。

【问题讨论】:

    标签: python pandas group-by curve-fitting


    【解决方案1】:

    试验数据集

    让我们创建一个虚拟数据集来进行讨论:

    import numpy as np
    import pandas as pd
    from scipy import stats
    
    np.random.seed(123)
    
    def generate_data(identifier, size=100, loc=0., scale=1.):
        return [
            {"id": identifier, "value": value}
            for value in scale*np.random.randn(size) + loc
        ]
    
    df = pd.DataFrame(
        generate_data(1) + generate_data(2, loc=1, scale=2) + generate_data(3, loc=-1, scale=3)
    )
    

    随机样本如下所示:

         id     value
    263   3 -2.750610
    135   2  1.646938
    285   3 -3.047614
    258   3 -0.911071
    154   2 -1.039310
    

    分组和应用

    解决你的问题的关键是DataFrameGroupBy对象暴露的apply方法groupby返回。

    首先创建一个函数,接口如下:

    • DataFame 作为输入;
    • 实现所需的逻辑;
    • 返回 Series 作为输出。

    从你的问题陈述来看,它归结为:

    def analyze(frame):
        params = stats.norm.fit(frame["value"])
        fwhm = 2*np.sqrt(2*np.log(2))*params[1]
        return pd.Series({
             "loc": params[0], "scale": params[1],
             "count": frame.shape[0], "fwhm": fwhm
        })
    

    然后简单地应用于分组数据:

    df.groupby("id").apply(analyze)
    

    DataFrameGroupBy 将对每个分组的 DataFrame(桶)调用此函数,并返回一个新的 DataFrame,其中 Series 字段作为每个桶的列作为索引。

    返回:

             loc     scale  count      fwhm
    id                                     
    1   0.027109  1.128240  100.0  2.656803
    2   0.960929  1.940107  100.0  4.568603
    3  -1.285394  2.908368  100.0  6.848684
    

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2019-02-08
      • 1970-01-01
      • 2021-03-04
      • 2016-07-05
      相关资源
      最近更新 更多