【发布时间】:2018-12-27 09:55:33
【问题描述】:
我一直在尝试找到一种在 python 中创建“average_gain_up”的方法但没有成功,但有点卡住了。作为 groupby 的新手,它如何处理我无法掌握的功能,因此如何思考这些类型的问题背后的任何直觉都会有所帮助。
问题: 创建一个滚动的 14 天总和,仅当值为 >0 时才求和。
new=pd.DataFrame([[1,-2,3,-2,4,5],['a','a','a','b','b','b']])
new= new.T #transposing into a friendly groupby format
#Group by a or b, filter to only have positive values and then sum rolling, we
keep NAs to ensure the sum is ran over 14 values.
groupby=new.groupby(1)[0].filter(lambda x: x>0,dropna=False).rolling(14).sum()
预期的总和框架:
x.all()/len(x) 结果:
这会引发类型错误“过滤器必须返回布尔结果”。 通过阅读其他答案,我明白我在问一个系列/帧是否优于 0 。 上面的代码适用于 len(x),在这种情况下也很有意义。
我也尝试使用 all(),但它的行为不符合预期。 .all() 函数每组返回一个布尔值,然后总和只是一个简单的滚动总和。
我尝试创建一个布尔值列表来说明哪些值是正数,哪些不是,但这也会产生错误,这次我不知道为什么。
groupby1=new.groupby(1)[0]
groupby2=[y>0 for x in groupby1 for y in x[1] ]
groupby_try=new.groupby(1)[0].filter(lambda x:groupby2,dropna=False).rolling(2).sum()
1) 我如何使上述代码正常工作,我的想法有什么问题?
2) 这是执行这些类型操作的“最佳实践”方式吗?
感谢任何帮助,如果我遗漏了什么或需要任何进一步的说明,请告诉我。
【问题讨论】:
标签: python python-3.x pandas pandas-groupby