我在我的dataframe中创建了一系列计算,并成功地使用了apply,直到下面的一个例子。有谁能解释一下为什么“transform”在这个例子中起作用,而“apply”不起作用?我已经成功地用apply做了加法和减法运算,所以新的方面是np. where。
它不会抛出错误,只是为列返回NaN。
我能找到的所有适用地址的文章都不应该有这种类型的限制。有很多信息表明transform应该更有限制,即一次只处理一列,并被迫返回等于序列长度的值。
df['val'] = compiled.groupby(['category']).B.apply(lambda x : np.where(x > 0, x, 0))
df['val'] = compiled.groupby(['category']).B.transform(lambda x : np.where(x > 0, x, 0))
1条答案
按热度按时间8ulbf1ek1#
df.groupby('category').V.apply(f)
,当f
返回一个numpy数组时,将返回一个 Dataframe ,每个类别一个项目:df.groupby('category').V.transform(f)
,当f
返回一个numpy数组时,将返回一个dataframe,其中原始dataframe中每行有一个项目:由于您要将结果分配给原始 Dataframe 中的列,因此
transform
是要使用的适当方法。请注意,如果
f
返回一个pandas Series,则apply
的行为与transform
类似,这可能是apply
在过去为您工作的原因。有关
apply
和transform
之间差异的更深入讨论,请参见this answer。