首页 > 后端开发 > Python教程 > 在 Pandas DataFrame 中减去两列并计算平均值时,'apply”和'transform”有何不同?

在 Pandas DataFrame 中减去两列并计算平均值时,'apply”和'transform”有何不同?

Barbara Streisand
发布: 2024-11-26 20:28:11
原创
729 人浏览过

How do `apply` and `transform` differ when subtracting two columns and calculating the mean in a Pandas DataFrame?

减去两列并使用 apply 与 transform 获取平均值

考虑以下数据框:

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],<pre class="brush:php;toolbar:false">               'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
               'C': np.random.randn(8), 'D': np.random.randn(8)})

 A      B         C         D
登录后复制

0 foo 一 0.162003 0.087469
1 酒吧一 -1.156319 -1.526272
2 foo两个 0.833892 -1.666304
3 小节三 -2.026673 -0.322057
4 富二 0.411452 -0.954371
5 小节二 0.765878 -0.095968
6 富一 -0.654890 0.678091
7 foo 三 -1.789842 -1.130922

应用与转换

以下命令将 lambda 函数应用于每个组在dataframe:

df.groupby('A').apply(lambda x: (x['C'] - x['D']))
登录后复制

这将返回一个与原始数据框形状相同的数据框,其中每个单元格包含应用于相应组的 lambda 函数的结果。

以下命令进行转换数据框中的每个组:

df.groupby('A').transform(lambda x: (x['C'] - x['D']).mean())
登录后复制

这将返回与原始数据框形状相同的系列,其中每个单元格包含差异的平均值对应组的 C 列和 D 列之间。

为什么不同的命令有效

apply 和 transform 方法具有不同的行为,因为它们适用于不同的输入对象。

  • apply 将整个组作为 DataFrame 隐式传递给 lambda 函数。
  • transform将组中的每一列作为 Series 单独传递给 lambda 函数。

这种输入差异意味着 apply 可用于对整个组执行计算,而 Transform 只能用于执行对各个列进行计算。

使用转换返回单个值

需要注意的是,lambda传递给转换的函数必须为每个组返回一个值。如果 lambda 函数返回 DataFrame、Series 或任何其他非标量值,则会引发错误。

这就是以下命令失败的原因:

df.groupby('A').transform(lambda x: (x['C'] - x['D']))
登录后复制

lambda函数返回一个DataFrame,它不是单个

结论

apply和transform是两个强大的方法,可用于对数据帧执行groupby操作。为了有效地使用它们,了解这两种方法之间的区别非常重要。

以上是在 Pandas DataFrame 中减去两列并计算平均值时,'apply”和'transform”有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板