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

熊猫的转换不起作用按输出分组,第1张

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

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
*** 作,而对每个组的每一列进行 *** 作。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5647260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存