Series.transform和Series.apply之间有什么区别?

时间:2019-11-20 03:57:50

标签: python pandas

我正在尝试掌握transformapply熊猫方法之间的区别。 This的答案很有帮助。第一个主要区别仅适用于从DataFrameGroupBy对象调用transform的情况,因此它丝毫不影响来自Series的调用。第二个主要区别是transform执行检查以确保方法的输出长度与其输入长度匹配。因此,我尝试提出一个测试案例,其中我从Seires调用这些方法,并且apply成功执行,而transform由于长度差异而失败。我最终得到的是这样:

  

some_series.apply(lambda x:pd.Series([1,2]))

     

some_series.transform(lambda x:pd.Series([1,2]))

令我惊讶的是,他们两个都以完全相同的方式成功地创建了一个包含两列的DataFrame。如果transform使用len()函数检查长度,那是有道理的,因为len()返回行数,并且不会改变。但是接下来我很难解决行数可能发生变化的任何情况,因为transform/apply进行的函数调用的次数似乎由原始行数决定系列,无论函数调用返回什么确切信息。

问题是,从Series对象调用时,transformapply方法的行为是否完全不同?如果没有,似乎只应使用apply,因为它更快。

1 个答案:

答案 0 :(得分:0)

我以posting this question on pandas GitHub结尾。事实证明,这两种方法的行为毕竟可以不同。具体来说,Series.apply()始终将单个单元格作为函数参数传递,而Series.transform()在某些情况下可将整个Series作为函数参数传递。我仍然不确定如何应用此属性,因为通过转换可以对整个Series进行的任何操作都可以直接在该Series上进行。我唯一的猜测是较短的更简洁的代码,但是不能肯定地说。