簡體   English   中英

如果相同的連續值,則 Groupby 剩余時間顯示 True

[英]Groupby remainder of day to show True if identical consecutive values

給定以下 DataFrame。 如何在val列中在一天內看到兩個連續的"y"為當天的 rest添加一個顯示True的新列(否則為False )。

  • 每天都會重置邏輯。

很接近,但在看到條件后的這一天,每一行都應該是True

代碼

df_so = pd.DataFrame(
    {
        "val": list("yynnnyyynn")
    },
    index=pd.date_range(start="1/1/2018", periods=10, freq="6h"),
)

                   val
2018-01-01 00:00:00 y
2018-01-01 06:00:00 y
2018-01-01 12:00:00 n
2018-01-01 18:00:00 n
2018-01-02 00:00:00 n
2018-01-02 06:00:00 y
2018-01-02 12:00:00 y
2018-01-02 18:00:00 y
2018-01-03 00:00:00 n
2018-01-03 06:00:00 n

所需 output

                    val  out
2018-01-01 00:00:00  y   False
2018-01-01 06:00:00  y   False
2018-01-01 12:00:00  n   True
2018-01-01 18:00:00  n   True
2018-01-02 00:00:00  n   False
2018-01-02 06:00:00  y   False
2018-01-02 12:00:00  y   False
2018-01-02 18:00:00  y   True
2018-01-03 00:00:00  n   False
2018-01-03 06:00:00  n   False

您可以使用cummax來檢查條件是否在過去的某個時間點成立:

target = 2
df_so['out'] = (df_so['val'].eq('y')
                    .groupby(df_so.index.normalize())
                    .transform(lambda x: x.rolling(target).sum().shift().eq(target).cummax())
               )

Output:

                    val    out
2018-01-01 00:00:00   y  False
2018-01-01 06:00:00   y  False
2018-01-01 12:00:00   n   True
2018-01-01 18:00:00   n   True
2018-01-02 00:00:00   n  False
2018-01-02 06:00:00   y  False
2018-01-02 12:00:00   y  False
2018-01-02 18:00:00   y   True
2018-01-03 00:00:00   n  False
2018-01-03 06:00:00   n  False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM