在Pandas / Numpy中,如何使用2个不同的列在每个块内部实现滚动功
发布时间:2020-12-20 13:45:19 所属栏目:Python 来源:网络整理
导读:我有一个由块“划分”的df,如下所示: A = pd.DataFrame([[1,5,2,0],[2,4,[3,3,1,1],[4,[5,1]],columns=['A','B','C','D'],index=[1,6,]) 在此示例中,块大小为3,并且我们有2个块(由“D”列中的元素1发出信号).我需要在每个块内执行滚动计算,这涉及2列.具体来
我有一个由块“划分”的df,如下所示:
A = pd.DataFrame([[1,5,2,0],[2,4,[3,3,1,1],[4,[5,1]],columns=['A','B','C','D'],index=[1,6,]) 在此示例中,块大小为3,并且我们有2个块(由“D”列中的元素1发出信号).我需要在每个块内执行滚动计算,这涉及2列.具体来说,我需要创建一个列’E’,它等于列’B’减去列’C’的滚动最小值,在函数中: def retracement(x): return x['B'] - pd.rolling_min(x['C'],window=3) 我需要为每个块应用上面的公式.所以following this recipe我试过: chunk_size = 3 A['E'] = A.groupby(np.arange(len(A))//chunk_size).apply(lambda x: retracement(x)) ValueError: Wrong number of items passed 3,placement implies 1 输出看起来像: A B C D E 1 1 5 2 0 3 2 2 4 4 0 2 3 3 3 1 1 2 4 4 2 2 0 0 5 5 1 4 0 -1 6 2 4 4 1 2 谢谢 更新: 以下@EdChum推荐不起作用,我得到了 TypeError: <lambda>() got an unexpected keyword argument 'axis' 解决方法
这样的事情:
def chunkify(chunk_size): df['chunk'] = (df.index.values - 1) / chunk_size df['E'] = df.groupby('chunk').apply(lambda x: x.B - pd.expanding_min(x.C)).values.flatten() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |