![](/img/trans.png)
[英]How to calculate slope of Pandas dataframe column based on previous N rows
[英]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 x
和y
之间的斜率以获得:
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)
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()
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.