在Pandas Dataframe中有条件地向前填充bool值

时间:2017-02-02 21:09:45

标签: python pandas

问题:

如果第一天输入True,到一天结束时,如何在pandas数据框中转发填充bool == 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

期望输出:

  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

2011-01-012011-01-02上,我们可以看到Trueffill直到一天结束,但在2011-01-03 00:00:00上有一个False所以没有改变了。

我尝试了什么?

我尝试使用ffill,但无法确定如何在我指定的条件下使用它。

1 个答案:

答案 0 :(得分:3)

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