熊猫系列申请方法

时间:2016-06-09 20:49:23

标签: python pandas apply

我一直在为系列和数据框架使用pandas apply方法,但我显然仍然缺少一些东西,因为我很难在一个简单的函数上试图执行。

这就是我在做的事情:

def minmax(row):
    return (row - row.min())/(row.max() - row.min())

row.apply(minmax)

但是,这会返回一个全零系列。例如,如果

row = pd.Series([0, 1, 2])

然后

minmax(row)

根据需要返回[0.0,0.5,1.0]。但是,row.apply(minmax)返回[0,0,0]。

我相信这是因为该系列是整数,整数除法返回0.但是,我不明白,

  • 为什么它适用于minmax(行)(不应该它的行为相同?),
  • 如何在apply函数中正确地转换它以返回适当的浮点值(我试图使用.astype转换它,这给了我所有NaNs ......我也不明白)< / LI>
  • 如果将其应用于数据帧,则为df.apply(minmax),它也可以根据需要运行。 (编辑添加)

我怀疑我错过了申请如何运作......或者是密集的基本信息。无论哪种方式,都要提前谢谢。

1 个答案:

答案 0 :(得分:2)

当您在row.apply(minmax) 上致电Series时,只会将值传递给该功能。这称为元素

  

调用Series的值函数。可以是ufunc(适用于整个系列的NumPy函数)或仅适用于单个值的Python函数。

当您在row.apply(minmax)上调用DataFrame任一行(默认)或将列传递给该函数时(根据axis的值)。

  

传递给函数的对象是具有索引DataFrame的索引(axis = 0)或列(axis = 1)的Series对象。返回类型取决于是否传递函数聚合,如果DataFrame为空,则取决于reduce参数。这称为行式列式

这就是为什么您的示例在DataFrame而不是Series上按预期工作的原因。有关将函数映射到Series的信息,请查看此answer