我有一个数据框,我想根据特定条件转发填充。
当条件成立时,我想要前向填充和回填。条件为 false 意味着该行和下一行之间的链接应该是中断。
当查看数据帧时,我的意思非常清楚,它看起来像这样:
condition_values = [True, True, True, False, True, True, False, True, True, False, True, True, True]
value_values = [0.1,np.nan, np.nan, np.nan, np.nan,np.nan, np.nan, np.nan, np.nan, 0.5, np.nan, 0.9, np.nan]
data = {'condition': condition_values,
'value': value_values}
df = pd.DataFrame(data)
变成:
condition_values = [True, True, True, False, True, True, False, True, True, False, True, True, True]
value_values = [0.1,0.1, 0.1, 0.1, np.nan, np.nan, np.nan, 0.5, 0.5, 0.5, 0.9, 0.9, 0.9]
data = {'condition': condition_values,
'value': value_values}
df2 = pd.DataFrame(data)
我尝试制作一堆数据帧,按 false、ffill 和 bfill 分割,然后重新连接。必须有一种更快的方法。我非常愿意接受提示而不是完整的解决方案 - 我正在尝试以某种方式解决这个问题。
我一直在努力。 我相信答案实际上在于 groupby。
s = df.condition.shift(1).eq(0).cumsum()
df['value2'] = df.groupby(s).value.ffill().bfill()
这还不完美,但已经实现了。
好的,问题是 ffill().bfill() 会破坏组,因为第二个填充正在处理系列。
明白了: df['value2'] = df.groupby(s).value.ffill() df['value2'] = df.groupby(s).value.bfill()