减去两列并使用 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 可用于对整个组执行计算,而 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中文网其他相关文章!