gpt4 book ai didi

python - 通过 .loc 对 Panda 切片进行矩阵运算的有效方法

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:03 25 4
gpt4 key购买 nike

我正在寻找一种通过 .loc 对 Panda 切片进行矩阵运算的有效方法

假设我有以下带有日期时间索引的数据帧的 .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 执行此操作而不使用矩阵转换?

最佳答案

注意 axis=0。这不是默认值。

代码:

import pandas as pd

data = [
['2019-07-30', 5.0, 4.0, 3.0, 2.0],
['2019-07-31', 2.0, 3.0, 4.0, 3.0],
['2019-08-01', 1.0, 2.0, 3.0, 4.0],
]
columns = ['Date', '2', '3', '4', 'A']
df = pd.DataFrame(data=data, columns=columns)
df.set_index('Date', inplace=True)

df_new = df.loc['2019-07-30':, '2':'4'].sub(df.loc['2019-07-30':, 'A'], axis=0)
print(df_new)

结果:

              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

关于python - 通过 .loc 对 Panda 切片进行矩阵运算的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57319100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com