【发布时间】:2019-12-10 15:30:18
【问题描述】:
我正在寻找一种通过 .loc 对 Panda 切片进行矩阵运算的有效方法
假设我有以下带有 datetimeindex 的数据帧的 .loc 切片
(df.loc['07-30-19':,'2':'4'])=
2 3 4
Date
2019-07-30 5.0 4.0 3.0
2019-07-31 2.0 3.0 4.0
2019-08-01 1.0 2.0 3.0
df 中有另一列称为 A(共享相同的日期索引),这样
(df.loc['07-30-19':,'A'])
Date
2019-07-30 2.0
2019-07-31 3.0
2019-08-01 4.0
我的目标是有效地执行一个操作,其中我从第一个切片(第 2-4 列)中的每个对应列中减去它们所拥有的共享日期时间索引的值 A。
基本上我想结束
2 3 4
Date
2019-07-30 3.0 2.0 1.0
2019-07-31 -1.0 0.0 1.0
2019-08-01 -3.0 -2.0 -1.0
我尝试使用如下切片操作,但它搞砸了
(df.loc['07-30-19':,'2':'4'])-df.loc['07-30-19':,'A']
Out[115]:
2019-07-30 00:00:00 2019-07-31 00:00:00 ... 3 4
Date ...
2019-07-30 NaN NaN ... NaN NaN
2019-07-31 NaN NaN ... NaN NaN
2019-08-01 NaN NaN ... NaN NaN
我使用 numpy 的工作基本上是将 A 的值转换为匹配的 nxn 矩阵作为切片,然后进行矩阵数学运算
(df.loc['07-30-19':,'2':'4'])-(df.loc['07-30-19':,'A'].values.reshape(3,1)*np.ones((1,3)))
Out[118]:
2 3 4
Date
2019-07-30 3.0 2.0 1.0
2019-07-31 -1.0 0.0 1.0
2019-08-01 -3.0 -2.0 -1.0
但我想知道是否有一种更简单的方法可以通过 .loc 而不使用矩阵转换来做到这一点?
【问题讨论】:
标签: python pandas numpy matrix slice