加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读