Pandas ffill 和 bfill 在同一列中 - 有条件

标签 pandas ffill

我有一个化学专栏,有时我会改变它们。我想填充直到“改变点”并在它之后填充。

我有几个像这样的改变点:

date0   NaN
date1   chem1
date2   NaN
date3   NaN
date4   change
date5   NaN
date6   chem2
date7   chem2
date8   NaN
date9   change
date10   NaN
date11   chem3
date12   NaN

我想要它:

date0   chem1
date1   chem1
date2   chem1
date3   chem1
date4   change
date5   chem2
date6   chem2
date7   chem2
date8   chem2
date9   change
date10   chem3
date11   chem3
date12   chem3

关于这里的最佳方法有什么建议吗?

最佳答案

假设“col”是您的第二列,请使用自定义组:

df['col'] = df.groupby(df['col'].eq('change').cumsum())['col'].apply(lambda s:s.bfill().ffill())

输出;

      date     col
0    date0   chem1
1    date1   chem1
2    date2   chem1
3    date3   chem1
4    date4  change
5    date5   chem2
6    date6   chem2
7    date7   chem2
8    date8   chem2
9    date9  change
10  date10   chem3
11  date11   chem3
12  date12   chem3

关于Pandas ffill 和 bfill 在同一列中 - 有条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72713248/

相关文章:

dolphindb - 如何使用特定规则转发非 NULL 值?

python - 前向填充上述值 pandas 的 block

python - Pandas:根据其他列值有条件地替换值

python - Pandas 检测连续的负数并返回值

Python/ Pandas : Create column in appended file based on Excel cell

python - 计算Series的局部时间导数

Python 根据另一个数据帧中的匹配行将部分行移动到上一行

python - 有没有一种方法可以在 pandas/numpy 中使用升序逻辑进行前向填充?