gpt4 book ai didi

python - 根据数据框中的另一个单元格值更改单元格值

转载 作者:行者123 更新时间:2023-11-28 21:40:29 25 4
gpt4 key购买 nike

我正在尝试确定某列连续多少天高于或低于某个阈值。

>>> df.head()
Open High Low Close Volume
Date
2004-08-19 49.96 51.98 47.93 50.12 NaN
2004-08-20 50.69 54.49 50.20 54.10 NaN
2004-08-23 55.32 56.68 54.47 54.65 NaN
2004-08-24 55.56 55.74 51.73 52.38 NaN
2004-08-25 52.43 53.95 51.89 52.95 NaN
>>>

对于上面的示例,我希望另一列 df['RDA'] 在列 Open 超过 50 的每一天连续递增。对于连续低于 50 的每一天,我想要第二列 df[ 'RDB'] 递增,df['RDA'] 重置为 0。我试过 if/then 逻辑,但它不喜欢那样,并给了我一个值错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). how can i sort it out

我希望我的数据框的输出看起来像这样:

>>> df.head()
Open High Low Close Volume RDA RDB
Date
2004-08-19 51.96 51.98 47.93 50.12 NaN 1 0
2004-08-20 50.69 54.49 50.20 54.10 NaN 2 0
2004-08-23 55.32 56.68 54.47 54.65 NaN 3 0
2004-08-24 45.56 55.74 51.73 52.38 NaN 0 1
2004-08-25 42.43 53.95 51.89 52.95 NaN 0 2
2004-08-26 41.96 51.98 47.93 50.12 NaN 0 3
2004-08-27 40.69 54.49 50.20 54.10 NaN 0 4
2004-08-28 55.32 56.68 54.47 54.65 NaN 1 0
2004-08-29 55.56 55.74 51.73 52.38 NaN 2 0
2004-08-30 52.43 53.95 51.89 52.95 NaN 3 0
>>>

Pandas 可以做到这一点吗?我知道您可以获得列中值的计数,但到目前为止我一直无法找到具有连续值的方法。带有 2 个变量的 if/then 语句可以工作,但就像我上面提到的那样,我在尝试时遇到值错误。任何帮助将不胜感激。

最佳答案

首先,向数据框添加一个标志列以指示开盘价是否高于目标价格 50(真或假)。

然后,您可以使用 compare-cumsum-groupby pattern识别此标志的累积分组并将 cumsum 应用于每个此类组。

我们现在需要反转标志,使 1 为 0,0 为 1,然后使用相同的策略计算 rdb

最后,我们删除 flag 列(我使用 .iloc[:, :-1] 删除它,因为我将它添加为最后一列)并追加新的 RDARDB 列。

target_price = 50
df = df.assign(flag=df.Open.gt(target_price)) # True if `Open` greater than `target_price`, otherwise False.

rda = df.groupby((df['flag'] != df['flag'].shift()).cumsum()).flag.cumsum()
df['flag'] = ~df['flag'] # Invert flag for RDB.
rdb = df.groupby((df['flag'] != df['flag'].shift()).cumsum()).flag.cumsum()

df = df.iloc[:, :-1].assign(RDA=rda, RDB=rdb)
>>> df
Date Open High Low Close Volume RDA RDB
0 8/19/04 51.96 51.98 47.93 50.12 NaN 1 0
1 8/20/04 50.69 54.49 50.20 54.10 NaN 2 0
2 8/23/04 55.32 56.68 54.47 54.65 NaN 3 0
3 8/24/04 45.56 55.74 51.73 52.38 NaN 0 1
4 8/25/04 42.43 53.95 51.89 52.95 NaN 0 2
5 8/26/04 41.96 51.98 47.93 50.12 NaN 0 3
6 8/27/04 40.69 54.49 50.20 54.10 NaN 0 4
7 8/28/04 55.32 56.68 54.47 54.65 NaN 1 0
8 8/29/04 55.56 55.74 51.73 52.38 NaN 2 0
9 8/30/04 52.43 53.95 51.89 52.95 NaN 3 0

关于python - 根据数据框中的另一个单元格值更改单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579613/

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