问题:
如果第一天输入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-01
和2011-01-02
上,我们可以看到True
为ffill
直到一天结束,但在2011-01-03 00:00:00
上有一个False
所以没有改变了。
我尝试了什么?
我尝试使用ffill
,但无法确定如何在我指定的条件下使用它。
答案 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