【问题标题】:Pandas checking True False in Groupby for last n RowsPandas 在 Groupby 中检查最后 n 行的真假
【发布时间】:2021-05-09 08:50:07
【问题描述】:

如果最后 N (3) 行或当前行中的任何一行在 groupby 中为真,那么我希望输出为真。

这就是我一直在尝试的方式,无论是使用转换,因为它是单列。

import pandas as pd

data = [
    ['False', 'CLE',],
    ['False', 'CLE'],
    ['True', 'CLE'],
    ['False', 'MON'],
    ['False', 'CLE'],
    ['False', 'CLE'],
    ['False', 'CLE'],
    ['False', 'CLE']
]

# Create the pandas DataFrame
df = pd.DataFrame(data,
                  columns=["bool", "city"])

df['x'] = df.groupby(['city'])['bool']\
            .transform(lambda x: x==True & 
                                 x.index\
                                  .isin(x.index[-2:]))

输出应该是:

False
False
True
False
True
True
False
False

【问题讨论】:

    标签: python pandas group-by transform


    【解决方案1】:

    您可以在组内获取您的 bool 列的 rolling 总和,然后使用 astype(bool) 将其设置为 True 如果该行或之前的任何 N 是 True(即任何非零总和)。首先我们需要让你的价值观Boolean

    df['bool'] = df['bool'].map({'False': False, 'True': True})
    
    df['x'] = (df.groupby('city')['bool'].rolling(3, min_periods=0)
                 .sum()
                 .astype(bool)
                 .reset_index(0, drop=True))
    

        bool city      x
    0  False  CLE  False
    1  False  CLE  False
    2   True  CLE   True
    3  False  MON  False
    4  False  CLE   True
    5  False  CLE   True
    6  False  CLE  False
    7  False  CLE  False
    

    【讨论】:

    • 优秀的解决方案!
    猜你喜欢
    • 2015-07-30
    • 2021-04-20
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多