栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

熊猫的转换不起作用按输出分组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

熊猫的转换不起作用按输出分组

transform
没有足够的文档,但是似乎它的工作方式是传递转换函数不是将整个组作为数据框,而是单个组中的单个列。我不认为这确实意味着要执行的操作,并且您的解决方案
apply
也不错。

这样吧

tips.groupby('smoker').transform(func)
。将有两个组,分别称为group1和group2。转换不会调用
func(group1)
func(group2)
。相反,它先调用
func(group1['total_bill'])
,然后依次
func(group1['tip'])
是等,然后依次
func(group2['total_bill'])
func(group2['tip'])
。这是一个例子:

>>> print d   A  B  C0 -2  5  41  1 -1  22  0  2  13 -3  1  24  5  0  2>>> def foo(df):...     print ">>>"...     print df...     print "<<<"...     return df>>> print d.groupby('C').transform(foo)>>>2    0Name: A<<<>>>2    2Name: B<<<>>>1    13   -34    5Name: A<<<>>>1   -13    14    0Name: B# etc.

您可以看到

foo
首先被调用的是原始数据帧的C = 1组的A列,然后是该组的B列,然后是C = 2组的A列,等等。

如果您考虑转换的目的,这是有道理的。这是为了在组上应用转换功能。但是通常,将这些功能应用于整个组时,仅应用于给定的列,就没有意义。例如,pandas文档中的示例是有关使用进行z标准化的

transform
。如果您有一个带有年龄和体重列的Dataframe,那么就这两个变量的总体平均值进行z标准化是没有意义的。拿一堆数字的整体平均值甚至都没有任何意义,其中一些是年龄,一些是权重。您必须相对于平均年龄对年龄进行标准化,相对于平均体重,对体重进行标准化,这意味着您要为每列分别进行转换。

因此,基本上,您无需在此处使用转换。

apply
是适当的功能,因为
apply
实际上每个组都作为一个Dataframe进行
transform
操作,而对每个组的每一列进行操作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641471.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号