Python 熊猫:根据条件在中间填充

Python 熊猫:根据条件在中间填充,python,pandas,dataframe,Python,Pandas,Dataframe,我想填充来自两个不同列的两个数字之间的值。我有一个像这样的数据帧(df) 当我在开始列和结束列中有一个数字时,我只想向前填充值列。 基本上,开始表示流程正在开始,结束表示流程正在结束。因此,值列只能在这两者之间填充 这是一个生成数据的代码,DF是我想要得到的 from datetime import datetime, timedelta import pandas as pd import numpy as np import random np.random.seed(11) date_t

我想填充来自两个不同列的两个数字之间的值。我有一个像这样的数据帧(df) 当我在开始列结束列中有一个数字时,我只想向前填充值列。 基本上,开始表示流程正在开始,结束表示流程正在结束。因此,值列只能在这两者之间填充

这是一个生成数据的代码,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

提前感谢

尝试以下方法:首先,你要向前填充。然后计算“事件”的数量。如果“事件”的数量为偶数,则将值替换为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'事件。我们希望“结束”事件发生后立即计数,以便“结束”行中的“值”不会无效。

您能否添加detail@Leo,为什么要在df[End]中移动
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