繁体   English   中英

Pandas Dataframe中的bool值的条件正向填充

[英]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-012011-01-02我们可以看到Trueffill直到一天结束,但在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM