pandas - Pandas 数据框中的滚动方式
问题描述
我正在尝试在 DataFrames 上运行一些计算。我想计算两组滚动平均值之间的平均差异。更具体地说,长期平均值 ( lst
) 和较小的平均值 ( ) 之间差异的平均值lst_2
。我正在尝试将计算与双 for 循环结合起来,如下所示:
import pandas as pd
import numpy as pd
def main(df):
df=df.pct_change()
lst=[100,150,200,250,300]
lst_2=[5,10,15,20]
result=pd.DataFrame(np.sum([calc(df,T,t) for T in lst for t in lst_2]))/(len(lst)+len(lst_2))
return result
def calc(df,T,t):
roll=pd.DataFrame(np.sign(df.rolling(t).mean()-df.rolling(T).mean()))
return roll
总的来说,我应该有 20 个差异(5 和 100、10 和 100、15 和 100 ... 20 和 300);我采用差异的符号,我想要每个时间点的这些差异的平均值。理想情况下,结果将是一个 dataframe result
。
我得到了错误:cannot copy sequence with size 3951 to array axis with dimension 1056
当它运行双 for 循环时。显然我明白,由于不同的 T 和 t 的滚动,当涉及到数组转换(使用 )时,数据帧的维度是不相等的np.sum
,但我认为它会使用“NaN”来对齐维度。希望我已经足够清楚了。谢谢你。
根据评论中的要求,这是一个示例。让我们假设以下数据框:
df = pd.DataFrame({'A': [100,101.4636,104.9477,106.7089,109.2701,111.522,113.3832,113.8672,115.0718,114.6945,111.7446,108.8154]},index=[0, 1, 2, 3,4,5,6,7,8,9,10,11])
df=df.pct_change()
我需要计算以下两组平均值:
lst=[8,10]
lst_1=[3,4]
然后我按照以下步骤操作:
1/ 我想计算滚动平均值(3) - 滚动平均值(8),并得到它的符号:
roll=np.sign(df.rolling(3).mean()-df.rolling(8).mean())
这应该返回以下内容:
roll = pd.DataFrame({'A': ['NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',-1,-1,-1,-1},index=[0, 1, 2, 3,4,5,6,7,8,9,10,11])
2/ 我用差异 3-10 的组合重做第 1 步;4-8; 4-10。所以我得到了总共 4 个滚动数据框。
roll_3_8 = pd.DataFrame({'A': ['NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',-1,-1,-1,-1},index=[0, 1, 2, 3,4,5,6,7,8,9,10,11])
roll_3_10 = pd.DataFrame({'A': ['NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',-1,-1},index=[0, 1, 2, 3,4,5,6,7,8,9,10,11])
roll_4_8 = pd.DataFrame({'A': ['NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',-1,-1,-1,-1},index=[0, 1, 2, 3,4,5,6,7,8,9,10,11])
roll_4_10 = pd.DataFrame({'A': ['NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',-1,-1},index=[0, 1, 2, 3,4,5,6,7,8,9,10,11])
3/ 现在我有了所有的差异,我只想要它们的平均值,所以我将所有 4 个滚动数据帧相加,然后除以 4(计算的差异数)。结果应该是(在删除所有 N/A 值之前):
result = pd.DataFrame({'A': ['NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',-1,-1},index=[0, 1, 2, 3,4,5,6,7,8,9,10,11])
解决方案
推荐阅读
- android - 尺寸线间距
- spring-boot - RabbitMQ:覆盖路由键
- parse-platform - PFObject saveInBackground progressBlock 的语法
- python-3.x - 输入函数后的行未执行
- php - 使用 rename() 命令时如何制作副本?
- python-3.x - AttributeError:“BaseQuery”对象没有属性“搜索”导入 flask_whooshalchemy3
- python - AttributeError: 'spacy.tokens.doc.Doc' 对象没有属性 'lower'
- javascript - 在 php js 中显示几个 API 的结果
- javascript - Web 浏览器中的 React-native expo-video-player
- javascript - Apache Echarts - 在轴名称上使用 webfont