【问题标题】:Pandas groupby all rows between boolean column valuesPandas groupby 布尔列值之间的所有行
【发布时间】:2021-11-21 19:02:12
【问题描述】:

寻找用于在列布尔值之间对行进行分组的 Pandas 语法。

数据表

distance time new
0 2020-10-11 1:30:15 true
5 2020-10-11 1:31:15 false
10 2020-10-11 1:32:15 false
1 2020-10-11 2:30:15 true
2 2020-10-11 2:31:15 false
30 2020-10-11 2:32:15 false
31 2020-10-11 2:33:15 false
0 2020-10-12 1:31:15 true
5 2020-10-12 1:32:15 false

问题

希望对属于每个活动的所有行进行分组。新活动由新列中的真实值确定。根据上面的数据应该有3组。每个组都需要从第一行以 True 开始,并在下一个 True 之前以最后一个 False 结束。 使用groupby如何实现这一点?

代码

这是使用groupby 和按日期分组的功能,但就像我上面所说的,我希望将其更改为按“新”列分组行到活动中。不过我打算在这样的 for 循环中使用。

for idx, day in df.groupby(df.timestamp.dt.date):
    print(idx)
    print(day)

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    只需按df['new'].cumsum()分组即可:

    for idx, day in df.groupby(df['new'].cumsum()):
        print('-----')
        print(idx)
        print(day)
    

    输出:

    -----
    1
       distance                time    new
    0         0  2020-10-11+1:30:15   True
    1         5  2020-10-11+1:31:15  False
    2        10  2020-10-11+1:32:15  False
    -----
    2
       distance                time    new
    3         1  2020-10-11+2:30:15   True
    4         2  2020-10-11+2:31:15  False
    5        30  2020-10-11+2:32:15  False
    6        31  2020-10-11+2:33:15  False
    -----
    3
       distance                time    new
    7         0  2020-10-12+1:31:15   True
    8         5  2020-10-12+1:32:15  False
    

    【讨论】:

    • 就是这样。我认为在熊猫中必须有一种简单的方法来做到这一点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-04-01
    • 2019-03-02
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2022-07-19
    • 2014-12-22
    • 2021-12-01
    相关资源
    最近更新 更多