group_by 输出转换为数据框的问题

Posted

技术标签:

【中文标题】group_by 输出转换为数据框的问题【英文标题】:group_by output conversion to data frame issues 【发布时间】:2020-12-13 19:05:41 【问题描述】:

所以我不确定我是否正在采取最好的方法来解决这个问题,但这就是我目前所拥有的: 这是我正在使用的 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 和属性(如“使用的数据”)的数据框,我该如何制作这个数据框,以便我可以为每个 user_id 进行 total_use = calls['total_calls']*internet['data_used] 之类的计算?

谢谢。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢!我认为这解决了我的问题。需要看看这个解决方案如何与我的进一步计算一起工作。

以上是关于group_by 输出转换为数据框的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 dplyr group_by 模拟 split():返回数据帧列表

将pyspark数据框的列转换为小写

如何使用 insertUI 在 Shiny 应用程序中将 textInput 转换为输出

使用 group_by 后根据条件转换哈希值

关于在矩阵中计算均值并将其转换为 R 中的数据框的问题

重命名数据框的行和列