【发布时间】:2015-12-13 03:25:49
【问题描述】:
我想在包含单个列 price 的 pandas 数据框中创建一个新列 comp。这个新列的值应该由处理price 的当前和最后 3 个值的函数生成。
df.apply() 在单行上工作,shift() 似乎不起作用。专家们有什么建议让它在矢量化操作中工作吗?
【问题讨论】:
我想在包含单个列 price 的 pandas 数据框中创建一个新列 comp。这个新列的值应该由处理price 的当前和最后 3 个值的函数生成。
df.apply() 在单行上工作,shift() 似乎不起作用。专家们有什么建议让它在矢量化操作中工作吗?
【问题讨论】:
使用系列求和group.apply() 函数。下面假设您有一个名为 ID 的索引或列,其行值递增 1、2、3、...,可用于倒数 3 个值。
# SERIES SUM FUNCTION
def intsum(x):
if x < 3:
ser = df.price[(df.ID < x)]
else:
ser = df.price[(df.ID >= x - 3) & (df.ID < x)]
return ser.sum()
# APPLY FUNCTION
df['comp'] = df['ID'].apply(intsum)
【讨论】: