计算分类值并将得到的列添加到现有数据框中

2024-05-13 01:37:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试计算每个会话中现有数据帧不同时段的频率:

session       time        date      period
   1         05:51:53   2015-05-22  night
   1         05:52:59   2015-05-22  night
   1         06:08:24   2015-05-22  night
   1         06:09:06   2015-05-22  night
   1         08:25:31   2015-05-22  morning
   2         08:25:35   2015-05-22  morning
   2         08:26:37   2015-05-22  morning
   2         08:27:11   2015-05-22  morning
   2         12:33:17   2015-05-22  noon
   3         12:33:45   2015-05-22  noon

为了得到像这样的东西:

^{pr2}$

我用这个方法

 df['frequency'] = df.groupby('session', as_index=False)['period'].apply(lambda x: x.value_counts())

我有个错误:TypeError: incompatible index of inserted column with frame index

如果我将.value_counts直接应用于groupby作为

 df['frequency'] = df.groupby('session', as_index=False)['period'].value_counts()

我有一个错误,groupby方法没有属性value_counts

您能告诉我如何计算这些分类值,同时将结果列添加到现有的dataframe中(我相信as_index=False可以解决这个问题,但显然不是)


Tags: 方法falsedfindexvaluesessionas错误
1条回答
网友
1楼 · 发布于 2024-05-13 01:37:37

您可以在'session', 'period'groupby并找到组的大小

In [19]: df['freq'] = df.groupby(['session', 'period'])['date'].transform(len)

In [20]: df
Out[20]:
   session      time        date   period freq
0        1  05:51:53  2015-05-22    night    4
1        1  05:52:59  2015-05-22    night    4
2        1  06:08:24  2015-05-22    night    4
3        1  06:09:06  2015-05-22    night    4
4        1  08:25:31  2015-05-22  morning    1
5        2  08:25:35  2015-05-22  morning    3
6        2  08:26:37  2015-05-22  morning    3
7        2  08:27:11  2015-05-22  morning    3
8        2  12:33:17  2015-05-22     noon    1
9        3  12:33:45  2015-05-22     noon    1

相关问题 更多 >