group_by输出转换为数据帧问题



所以我不确定我是否采取了最好的方法来解决这个问题,但这是我迄今为止所拥有的:这是我正在使用的df:

calls.head()
id  user_id call_date   duration
0   1000_93     1000    2018-12-27  9.0
1   1000_145    1000    2018-12-27  14.0
2   1000_247    1000    2018-12-27  15.0
3   1000_309    1000    2018-12-28  6.0
4   1000_380    1000    2018-12-30  5.0

我想知道如何创建一个数据框架,告诉我用户一个月内打了多少次电话。这是我用来生成的代码:

calls_per_month = calls.groupby(['user_id',calls['call_date'].dt.month])['call_date'].count()
calls_per_month.head(10)
user_id  call_date
1000     12            16
1001     8             27
9             49
10            65
11            64
12            56
1002     10            11
11            55
12            47
1003     12           149
Name: call_date, dtype: int64

现在,问题是我需要对其他数据帧的user_id属性进行进一步的计算,因此我需要能够访问我在该表中计算的总数。然而,我创建的表似乎不是一个数据帧,这不允许我这么做

calls_per_month = calls.groupby(['user_id',calls['call_date'].dt.month])['call_date'].count().reset_index()
#(calls_per_month.to_frame()).columns = ['user_id','date','total_calls']
calls_per_month.columns = ['user_id','date','total_calls']

(我尝试了使用和不使用to_frame(但我得到了以下错误:无法插入call_date,已存在

请提出解决这个问题的最佳方法。考虑到我有其他具有user_id和"data used"等属性的数据帧,我如何制作这个数据帧,以便为每个user_id进行total_use=calls['total_calls']*internet['data_used]等计算?

谢谢。

使用rename作为更改级别名称,因此Series.reset_index工作正常:

calls_per_month = (calls.groupby(['user_id',
calls['call_date'].dt.month.rename('month')])['call_date']
.count()
.reset_index())

相关内容

  • 没有找到相关文章

最新更新