python - 为什么按聚合分组没有按列返回分组
问题描述
我有空数据框columns: [order_id, uid, payment_channel, user_paid_amount, vertical]
当我使用df.groupby(['uid','vertical']).payment_channel.agg('count').reset_index()
它返回空数据框时Columns: [uid, vertical, total_transaction]
但是当我使用df.groupby(['uid','vertical']).user_paid_amount.agg('sum').reset_index()
它返回空数据框时Columns: [index, gmv]
如何使用聚合求和函数但仍保持uid
和vertical
列
编辑 示例数据框
IN [] : empty_df = pd.DataFrame(columns=['uid','vertical','topup_payable_amount'])
empty_df.dtypes
OUT[] : uid object
vertical object
topup_payable_amount object
dtype: object
解决方案
在按照您的方式创建的空数据框上,您的两个指令的结果是:
Empty DataFrame
Columns: [uid, vertical, payment_channel]
Index: []
和
Empty DataFrame
Columns: [index, user_paid_amount]
Index: []
请注意,就聚合列而言,我得到了 原始列名。
您可以“重命名”此列,将name参数传递给reset_index,例如
df.groupby(['uid','vertical']).user_paid_amount.agg('sum').reset_index(name='xyz')
(或任何其他名称)。
我使用Pandas版本0.25.3和Python版本3.8.0。如果您有一些旧版本,请升级并重复测试。
现在让我们来看看结果中分组列的名称。
请注意,如果您创建了一个空的DataFrame,则Pandas没有关于列类型的信息。通常(如果提供了一些数据行),每列的类型将从源数据中推断出来,但在您的情况下不是。
这就是为什么所有列(包括user_paid_amount)的类型都设置为object的原因。
结果是你不能对这样的列求和(你只能在数字列上)。显然, Pandas代码并没有引发异常,而是采用了一些“异常”的执行路径,给出了上述奇怪的结果(名为index的分组列)。
如何把事情做对
定义 DataFrame 后,更改列类型,至少对于user_paid_amount:
empty_df.user_paid_amount = empty_df.user_paid_amount.astype(float)
然后执行:
print(empty_df.groupby(['uid','vertical']).user_paid_amount.agg('sum').reset_index())
给出“正常”结果:
Empty DataFrame
Columns: [uid, vertical, user_paid_amount]
Index: []
最后一句话:不要使用empty_df这样的名称。这个 Dataframe 在创建之后暂时是空的,但稍后它会包含一些数据(并且不会为空)。
推荐阅读
- javascript - 如何在 ApexCharts.js 中的图例系列上悬停时显示图例工具提示
- c++ - Curl 二进制链接错误:LNK1104: 无法打开文件 myproject\externals\curl-7.71.1-win32-mingw\lib.obj
- python - 如何从此数据类型中提取十六进制值?- Python cantools
- javascript - 更新 axios 请求分页
- php - curl期间突然收到403 Forbidden错误
- java - 接受 int 和 double 的输入,但之后它不能接受 string 的输入..并直接给出输出..我的错误是什么?
- android - 登录底部导航
- python - Newspaper3k API 文章下载()失败,HTTPSConnectionPool 端口=443 读取超时。(读取超时 = 7)在 URL 上
- amazon-web-services - 使用 SAM 时,AWS sam build 和 sam package 有什么区别?
- sql - T-SQL 提取两个已知字符串之间的字符串