【问题标题】:Rolling windows with column based condition?具有基于列的条件的滚动窗口?
【发布时间】:2021-09-26 05:40:10
【问题描述】:

如何加入基于 resume 列的行?
我的意思是,加入行,直到在 resume 列中有一个 1
对于连接的行,我想为每一列使用一个聚合函数,如下所示:

{ 'tunein': 'first', 'tuneout': 'last', 'watching(minute)': 'sum' }

示例:来自此数据帧

  account_id    asset_id     tunein      tuneout resume watching(minute)
1   61745         2967      12:42:00    13:01:00    0   19.0
2   61745         2967      15:48:00    15:51:00    1   3.0
3   61745         2967      15:52:00    15:56:00    1   4.0
4   61745         2967      15:57:00    16:23:00    0   26.0
5   61745         2967      21:06:00    21:10:00    0   4.0
6   61745         2967      22:17:00    22:37:00    1   20.0
7   61745         2967      23:55:00    23:58:00    1   3.0

得到这个:

  account_id    asset_id     tunein      tuneout resume watching(minute)
1   61745         2967      12:42:00    15:56:00    0   26.0
2   61745         2967      15:57:00    16:23:00    0   26.0
3   61745         2967      21:06:00    23:58:00    0   27.0

【问题讨论】:

    标签: python pandas numpy data-science


    【解决方案1】:

    让我们根据resume 列中0 的位置,使用cumsum 创建组:

    df = (
        df.groupby(df['resume'].eq(0).cumsum())
            .agg({'account_id': 'first', 'asset_id': 'first',
                  'tunein': 'first', 'tuneout': 'last', 'resume': 'first',
                  'watching(minute)': 'sum'})
            .rename_axis(None)
    )
    

    也可以通过编程方式创建字典:

    d = {c: 'first' for c in df.columns}  # default 'first'
    d['tuneout'] = 'last'  # set specific columns
    d['watching(minute)'] = 'sum'
    df = df.groupby(df['resume'].eq(0).cumsum()).agg(d).rename_axis(None)
    

    两个选项都产生df:

       account_id  asset_id    tunein   tuneout  resume  watching(minute)
    1       61745      2967  12:42:00  15:56:00       0              26.0
    2       61745      2967  15:57:00  16:23:00       0              26.0
    3       61745      2967  21:06:00  23:58:00       0              27.0
    

    如何创建群组:

    df['resume'].eq(0).cumsum()
    
    0    1
    1    1
    2    1
    3    2
    4    3
    5    3
    6    3
    Name: resume, dtype: int32
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多