我一直在为系列和数据框架使用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.但是,我不明白,
我怀疑我错过了申请如何运作......或者是密集的基本信息。无论哪种方式,都要提前谢谢。
答案 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。