Pandas Dataframe 中布尔值的条件前向填充

ade*_*e1e 2 python pandas

题:

True如果一天的第一次进入,我如何将熊猫数据帧中的填充布尔值转发到一天== True结束

请参阅以下示例和所需的输出。

数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'bool_col':[True,False,False,True,False,False,False,False,False],
    'dates':pd.date_range('1/1/2011', periods=9, freq='8h')})


   bool_col dates
0   True    2011-01-01 00:00:00
1   False   2011-01-01 08:00:00
2   False   2011-01-01 16:00:00
3   True    2011-01-02 00:00:00
4   False   2011-01-02 08:00:00
5   False   2011-01-02 16:00:00
6   False   2011-01-03 00:00:00
7   False   2011-01-03 08:00:00
8   False   2011-01-03 16:00:00
Run Code Online (Sandbox Code Playgroud)

期望输出:

  bool_col  dates
0   True    2011-01-01 00:00:00
1   True    2011-01-01 08:00:00
2   True    2011-01-01 16:00:00
3   True    2011-01-02 00:00:00
4   True    2011-01-02 08:00:00
5   True    2011-01-02 16:00:00
6   False   2011-01-03 00:00:00
7   False   2011-01-03 08:00:00
8   False   2011-01-03 16:00:00
Run Code Online (Sandbox Code Playgroud)

2011-01-012011-01-02我们可以看到Trueffill,直到一天结束,但是,2011-01-03 00:00:00 有一False所以未进行变更。

我尝试了什么?

我尝试使用,ffill但无法按照我指定的标准使用它。

Bou*_*oud 5

transform是一种基于 groupby 逻辑获得数据帧大小的结果系列的有效方法。下面的说明字面翻译为“每天分组,并查看 的第一个元素bool_col,如果是True,则整个组True保持该组”。

df.groupby(df.dates.dt.date).bool_col.transform(lambda g: True if g.iloc[0] else g)
Out[363]: 
0     True
1     True
2     True
3     True
4     True
5     True
6    False
7    False
8    False
Run Code Online (Sandbox Code Playgroud)