使用基于列的条件滚动 windows?
Rolling windows with column based condition?
如何根据 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
让我们根据 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
如何根据 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
让我们根据 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