【问题标题】:Calculate the slope based on two columns "coordinates"根据两列“坐标”计算斜率
【发布时间】:2025-12-04 08:20:24
【问题描述】:

我有类似于此的 pandas 数据框(日期为索引):

>>>            J01B_X   J01B_y   J02C_x   J02C_y...
date
2019-06-23     0.45    1.12       4.56    1.1
2019-06-24     0.22    1.18       5.5     0.8
2019-06-25     0.35    1.10       6.1     8.3
...
  • 原表这样有58列,基本上每个观测值有2个值,x和y值。

我想根据列中的 X 和 Y 值计算斜率:
(0.45 1.12, 0.22 1,18, 0.35 1.10) -> 基于 J01B_X 和 J01B_y 观察 J01B 的斜率
(4.51 1.1 , 5.5 0.8 , 6.1 8.3) -> 根据 J02C_X 和 J02C_y 计算观测 J02C 的斜率

问题是我有 58 个这样的列来计算它们的斜率,每次基于两列。

最后我希望有一行,不在同一个原始表中,基于两列计算斜率,如下所示(这是假数字):

>>>            J01B   J02C    ....   
               0.13    0.05       

有没有办法做这样的事情?

【问题讨论】:

    标签: python pandas linear-regression


    【解决方案1】:

    该示例创建了一个 pandas Series,它基本上是一个单维 pandas 对象,例如一行。如果您愿意,可以从中创建一个数据框

    import pandas as pd
    from scipy import stats
    
    slopeB = stats.linregress(df['J01B_X'], df['J01B_y'] )
    slopeB = slopeB[0]
    
    slopeC = stats.linregress(df['J02C_x'], df['J02C_y'] )
    slopeC = slopeC[0]
    
    #Create Pandas series with slope data
    slopes = pd.Series([slopeB, slopeC], index = ['J01B', 'J02C'], name="Slope")
    slopedf = pd.DataFrame(slopes).T
    

    斜坡看起来像这样:

    J01B   -0.278195
    J02C    4.233791
    Name: Slope, dtype: float64
    

    slopedf 看起来像这样,是一个有一行的 DataFrame:

               J01B      J02C
    Slope -0.278195  4.233791
    

    slopes 和slopedf 都可以以相同的方式进行查询,但是该系列将返回条目的数值,而slopedf 将返回带有数据的单个元素系列。即使系列在打印时显示为列,我认为这就是您想要的。

    #output of slopes['J01B']
    -0.2781954887218037
    
    #output of slopedf['J01B']
    Slope   -0.278195
    Name: J01B, dtype: float64
    

    【讨论】:

    • 我更新了答案以配合您更新的问题。