熊猫变量变化的误差



在下面的示例中,第一个应用作品。第二次投掷" TypeErr:"根据规则'safe'"安全'",u'occurred在index 0')

type('float64')将数组数据从dtype('float64')施加到dtype('int64')"
df = pd.DataFrame({'lag':[ 3, 5, 3, 4, 2, 3, 2, 3, 4, 3, 2, 2, 2, 3],
                   'A':[10,20,30,40,20,30,40,10,20,30,15,60,20,15],
                   'B':[11,21,31,41,21,31,41,11,21,31,15,61,21,25]})
df['C'] = df.apply(lambda x: df['A'].shift(x['lag'])[x.name], axis=1)
print df
df['D'] = df.apply(lambda x: df['B'].shift(x['lag'])[x.name], axis=1)
print df

请告诉我为什么会发生这种情况以及如何解决。谢谢,

(注意:我没有足够的"点"来在熊猫的可变偏移中发表评论)

这实际上是一件棘手的事情。我会尝试简洁。

当您使用apply使用CC_1时,您是按行迭代。对于每一行,Pandas将其作为pd.Series处理。初始分配后,您将NaN值放在df中,当访问该行时,整个行被解释为float


围绕#1
工作确保滞后值为int

df['D'] = df.apply(lambda x: df['B'].shift(int(x['lag']))[x.name], axis=1)

围绕#2
工作同时进行作业

df = df.assign(
    C=df.apply(lambda x: df['A'].shift(x['lag'])[x.name], axis=1),
    D=df.apply(lambda x: df['B'].shift(int(x['lag']))[x.name], axis=1)
)

更好的解决方案
但是,我会使用numpy来帮助此

这些滞后只是当前位置值较少滞后值

l = (np.arange(len(df)) - df.lag.values)

然后

df['C'] = np.where(l >= 0, df.A.values[l], np.nan)
df['D'] = np.where(l >= 0, df.B.values[l], np.nan)

最新更新