gpt4 book ai didi

python - Pandas :根据条件向前填充

转载 作者:太空宇宙 更新时间:2023-11-04 00:16:05 24 4
gpt4 key购买 nike

我想在两个不同列的两个数字之间填充值。我有一个看起来像这样的数据框(df)当我在Start columnEnd column 中有一个数字时,我只想在Value column 前填写。基本上,Start 表示一个进程正在开始,end 表示该进程正在结束。所以Value column只能填在这两者之间。

这是生成数据的代码,DF是我想要得到的。

from datetime import datetime, timedelta
import pandas as pd
import numpy as np
import random
np.random.seed(11)
date_today = datetime.now()
ndays = 10
df = pd.DataFrame({'date': [date_today + timedelta(days=x) for x in range(ndays)],
'Start': pd.Series(np.random.randn(ndays)), 'End':pd.Series(np.random.randn(ndays))})
df = df.set_index('date')
df = df.mask(np.random.random(df.shape) < .6)
df.End[{0,1,2,5,6,9}]=np.nan
df.Start[5]=1
df.Start[{1,3,4,2,8, 9}]=np.nan
df['Value']=np.nan
df.Value[{0,5}]=[0.3,0.1]
df

我想获得一个如下所示的数据框(DF):

                                 End     Start  Value
date
2018-06-18 22:34:35.964286 NaN 1.749455 0.3
2018-06-19 22:34:35.964286 NaN NaN 0.3
2018-06-20 22:34:35.964286 NaN NaN 0.3
2018-06-21 22:34:35.964286 0.561192 NaN 0.3
2018-06-22 22:34:35.964286 NaN NaN NaN
2018-06-23 22:34:35.964286 NaN 1.000000 0.1
2018-06-24 22:34:35.964286 NaN NaN 0.1
2018-06-25 22:34:35.964286 NaN NaN 0.1
2018-06-26 22:34:35.964286 -0.031075 NaN 0.1
2018-06-27 22:34:35.964286 NaN NaN NaN

提前致谢

最佳答案

试试这个:首先你向前填充。然后计算“事件”的数量。如果“事件”的数量是偶数,则用 NaN 替换值。

df['Value'] = df['Value'].fillna(method='ffill')
temp = (df['End'].shift().notnull().astype(int) + df['Start'].notnull().astype(int)).cumsum()
df.loc[temp % 2 == 0, 'Value'] = np.nan

编辑:我们必须使用 shift() 来修改“End”,否则它将计算发生在同一行的“End”事件。我们希望在“结束”事件发生后立即对其进行计数,以便“结束”行中的“值”不会无效。

关于python - Pandas :根据条件向前填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50920402/

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