gpt4 book ai didi

python - 有条件的向后填充python中的一列

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:37 24 4
gpt4 key购买 nike

我有一个如下所示的数据集(样本)

Date             Value
2019-05-01 0
2019-05-02 0
2019-05-03 0
2019-05-04 0
2019-05-05 0
2019-05-06 0
2019-05-07 0
2019-05-08 1
2019-05-09 0

我想对其进行转换,如果遇到 Value=1,则取 2 天前的 3 个值并将其填充为 1。同时将当前值设置为 0。换句话说,转换后的数据集应该是这样的

Date             Value
2019-05-01 0
2019-05-02 0
2019-05-03 1
2019-05-04 1
2019-05-05 1
2019-05-06 0
2019-05-07 0
2019-05-08 0
2019-05-09 0

请注意,在上面的示例中,转换后 2019-05-08 设置为 0,2019-05-03 至 2019-05-05 设置为 1(最后设置为 1 的值是 2 天前2019-05-08 和 2019-05-05 之前的 3 天也设置为 1)。如果两个连续的值显示为 1,我们将从显示为 1 的最后一个值开始日期计算。我想我可以通过 for 循环来做到这一点,但我想看看是否有任何内置函数可以帮助我解决这个问题。谢谢!

最佳答案

可能有更精确的方法来解决这个问题。但是,我只能考虑使用 Value==1 处的索引值(比如 i)来解决这个问题,然后在前面的位置获取索引值(2 个日期之前意味着 i-3,然后再获取两个高于它的值表示 i-4、i-5) 并将 Value 分配给 1。最后,将 Value 设置回 0最初为 Value==1 找到。

In [53]: df = pd.DataFrame({'Date':['2019-05-01','2019-05-02', '2019-05-03','2019-05-04','2019-05-05', '2019-05-06','20
...: 19-05-07','2019-05-08','2019-05-09'], 'Value':[0,0,0,0,0,0,0,1,0]})
...:
...:

In [54]: val_1_index = df.loc[df.Value == 1].index.tolist()

In [55]: val_1_index_decr = [(i-3, i-4, i-5) for i in val_1_index]

In [56]: df.loc[df['Value'].index.isin([i for i in val_1_index_decr[0]]), 'Value'] = 1

In [57]: df.loc[df['Value'].index.isin(val_1_index), 'Value'] = 0

In [58]: df
Out[58]:
Date Value
0 2019-05-01 0
1 2019-05-02 0
2 2019-05-03 1
3 2019-05-04 1
4 2019-05-05 1
5 2019-05-06 0
6 2019-05-07 0
7 2019-05-08 0
8 2019-05-09 0

关于python - 有条件的向后填充python中的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940221/

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