gpt4 book ai didi

python - 在行中出现某个项目后,更改数据框中的所有行。

转载 作者:行者123 更新时间:2023-12-01 02:14:05 25 4
gpt4 key购买 nike

假设我有一个像这样的数据框:

Open Close Split
144 144 False
142 143 False
... ... ...
138 139 False
72 73 True
72 74 False
75 76 False
... ... ...
79 78 False

显然数据框可能非常大,并且可能包含其他列,但这是核心。

我的最终目标是调整所有数据以考虑拆分,到目前为止我已经能够识别拆分(即“拆分”列)。

现在,我正在寻找一种优雅的方法,将拆分之前的所有内容除以 2,或者将拆分之后的所有内容乘以 2。

我认为最好的方法可能是将 True 向下展开到底部,然后将“Split”列中包含 True 的所有行相乘,但是有没有更 Pythonic 的方法来做到这一点?

最佳答案

假设 Split 是唯一的 bool 列,并且其他所有内容本质上都是数字,您可以只获取 cumsum 并相应地使用 loc 设置值 -

m = df.pop('Split').cumsum()

df.loc[m.eq(0)] /= 2 # division before split
df.loc[m.eq(1)] *= 2 # multiplication after split

df    
Open Close
0 72.0 72.0
1 71.0 71.5
2 69.0 69.5
3 144.0 146.0
4 144.0 148.0
5 150.0 152.0
6 158.0 156.0

这是迄今为止性能最好的选项。另一个可能的选项涉及 np.where -

df[:] = np.where(m.eq(0)[:, None], df / 2, df * 2)

df
Open Close
0 72.0 72.0
1 71.0 71.5
2 69.0 69.5
3 144.0 146.0
4 144.0 148.0
5 150.0 152.0
6 158.0 156.0

或者,

df.where/df.mask -

(df / 2).where(m.eq(0), df * 2)

或者,

(df / 2).where(m.ne(0), df * 2)

    Open  Close Split
0 72.0 72.0 0
1 71.0 71.5 0
2 69.0 69.5 0
3 144.0 146.0 2
4 144.0 148.0 0
5 150.0 152.0 0
6 158.0 156.0 0

这些远不如 loc 的索引选项高效,因为它涉及大量冗余计算。

关于python - 在行中出现某个项目后,更改数据框中的所有行。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48513626/

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