基于

问题描述 投票:0回答:1

我有一个数据框,我想根据特定条件转发填充。

当条件成立时,我想要前向填充和回填。条件为 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 分割,然后重新连接。必须有一种更快的方法。我非常愿意接受提示而不是完整的解决方案 - 我正在尝试以某种方式解决这个问题。

python pandas
1个回答
0
投票

我一直在努力。 我相信答案实际上在于 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()

© www.soinside.com 2019 - 2024. All rights reserved.