[英]Conditional forward fill of bool values in Pandas Dataframe
题:
如果一天的第一个输入== 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
所需输出:
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
但无法确定如何使用指定的条件来使用它。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.