繁体   English   中英

如何计算 pandas 中多索引 dataframe 的行中的斜率?

[英]How to calculate slope in rows of a multiindex dataframe in pandas?

我有这个df样本:

  Name  Cords   A      B    C
  Ob1     y    4.95  2.15  2.29
          x   36.33  47.8  460.2   
  Ob2     y    1.22  2.34  2.57
          x   36.33  47.8  460.2 

其中"Name"是索引, "Cords"是二级索引,即多索引 DataFrame,但现在我想计算 de index xy之间的斜率以获得:

  Name  Cords   A      B     C
  Ob1     y    4.95  2.15    2.29
          x   36.33  47.8   460.2 
        slope   0   -0.24    3.39
  Ob2     y    1.22  2.34    2.57
          x   36.33  47.8   460.2 
        slope   0    0.09  5.57e-4

我必须使用df.xs吗?我不知道 multiindex df 是如何工作的。

slope = (y2-y1)/(x2-x1)

  • 使用shift as np.roll()表示x2是 position AC的值
  • 看来您的样本数据对于COb1斜率不正确
  • 你的问题多索引切片已被使用.loc
from scipy.ndimage.interpolation import shift

df = pd.DataFrame({'A': {('Ob1', 'y'): 4.95,
  ('Ob1', 'x'): 36.33,
  ('Ob2', 'y'): 1.22,
  ('Ob2', 'x'): 36.33},
 'B': {('Ob1', 'y'): 2.15,
  ('Ob1', 'x'): 47.8,
  ('Ob2', 'y'): 2.34,
  ('Ob2', 'x'): 47.8},
 'C': {('Ob1', 'y'): 2.29,
  ('Ob1', 'x'): 460.2,
  ('Ob2', 'y'): 2.57,
  ('Ob2', 'x'): 460.2}})

x1 = df.loc[(slice(None), "x"), :].values
y1 = df.loc[(slice(None), "y"), :].values
x2 = shift(x1, [0, -1])
y2 = shift(y1, [0, -1])
dfs = pd.concat(
    [
        df,
        pd.DataFrame(
            shift((y2 - y1) / (x2 - x1), [0, 1]),
            columns=df.columns,
            index=pd.MultiIndex.from_product(
                [df.index.get_level_values(0).unique(), ["slope"]]
            ),
        ),
    ]
).sort_index()

output

               A          B           C
Ob1 slope   0.00  -0.244115    0.000339
    x      36.33  47.800000  460.200000
    y       4.95   2.150000    2.290000
Ob2 slope   0.00   0.097646    0.000558
    x      36.33  47.800000  460.200000
    y       1.22   2.340000    2.570000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM