Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫多指数EWMA:在多天内比较同一分钟_Python_Pandas_Statistics - Fatal编程技术网

Python 熊猫多指数EWMA:在多天内比较同一分钟

Python 熊猫多指数EWMA:在多天内比较同一分钟,python,pandas,statistics,Python,Pandas,Statistics,我正在尝试将一个数据集插入Pandas,并且正在使用这种方法做一些独特的事情 我有一个如下所示的数据集: Date, Time, Venue, Volume, SummedVolume 2015-09-14, 09:30, NYSE, 1000, 10000 2015-09-14, 09:31, NYSE, 1100, 10100 但是,我将这些数据按分钟/日期进行切片。我的文件可以追溯到几天以前,所以我调用了一定数量的文件,并将它们浓缩到我的数据框架中,通常使用最后20天 我想做的是使用pa

我正在尝试将一个数据集插入Pandas,并且正在使用这种方法做一些独特的事情

我有一个如下所示的数据集:

Date, Time, Venue, Volume, SummedVolume
2015-09-14, 09:30, NYSE, 1000, 10000
2015-09-14, 09:31, NYSE, 1100, 10100
但是,我将这些数据按分钟/日期进行切片。我的文件可以追溯到几天以前,所以我调用了一定数量的文件,并将它们浓缩到我的数据框架中,通常使用最后20天

我想做的是使用pandas ewma在一天中的同一分钟,在这20天中,按地点进行ewma。所以结果是,比较纽约证券交易所过去20天的09:30分钟,使用0.5的阿尔法,我认为在这种情况下是span=20。显然,对数据进行排序,使最旧的数据在后面,最新的数据在前面是很重要的,所以我也在这样做,数据不能是随机顺序

现在,我可以让熊猫在下面所示的时间和地点使用groupby对数据集进行简单的数学运算等。但是,当我尝试在这个数据集上执行ewma时,我会遇到错误,即无法在非唯一数据集上执行ewma,这是合理的。但是,将日期添加到多索引类型的残骸中,可以将同一分钟与其他日期的那一分钟进行比较

有人能想出一个解决办法吗

frame = pd.DataFrame()
concat = []

for fn in files:
    df = pd.read_csv(fn, index_col=None, header=0)
    concat.append(df)

frame = pd.concat(concat)

df = pd.DataFrame(frame)

if conf == "VenueStats":
    grouped = df.groupby(['time','Venue'], sort=True)
elif conf == "SymbolStats":
    grouped = df.groupby(['time','Symbol'], sort=True)

stats = grouped.mean().astype(int)

stats.to_csv('out.csv')
平均值之前df.head的初始输出我将场馆名称和值更改为0,因为这是敏感信息: 平均值后stats.head的输出: 以下是我尝试进行ewma时与上述平均值的不同之处:

for fn in files:
    df = pd.read_csv(fn, index_col=[0,1,2], header=0) #0=Date,1=Time,2=Venue
    concat.append(df)

frame = pd.concat(concat)

df = pd.DataFrame(frame, columns=['Volume','SummedVolume'])

if conf == "VenueStats":
    stats = df.groupby(df.index).apply(lambda x: pd.ewma(x,span=20))
elif conf == "SymbolStats":
    stats = df.groupby(df.index).apply(lambda x: pd.ewma(x,span=20))
以下是ewma版本的df.head和ewma版本的stats.head,它们看起来相同:

                           Volume  SummedVolume
Date       Time  Venue
2015-09-14 17:00 NYSE           0        0
                 ARCA           0        0
                 AMEX           0        0
                 NASDAQ         0        0
                 BATS           0        0

                           Volume  SummedVolume
Date       Time  Venue
2015-09-14 17:00 NYSE           0        0
                 ARCA           0        0
                 AMEX           0        0
                 NASDAQ         0        0
                 BATS           0        0

您希望以数据为轴心,使日期沿一个轴向下,时间沿另一个轴向下

如果没有一些可复制的数据,很难解决此问题,但解决方案如下:

df2 = (df.reset_index()
       .groupby(['tradeDate', 'time', 'exchange'])
       .first()  # Given that the data is unique by selected grouping
       .unstack(['exchange', 'time'])
pd.ewma(df2, span=20)

请提供平均值或ewma版本的df.head和stats.head?的结果?ewma版本的结果。我已经修改了我的解决方案以合并格式。它应该对音量有效。如果是这样,我将扩展它以同时执行volume和streamV。以下是我从插入中得到的反馈:AttributeError:无法访问“DataFrameGroupBy”对象的可调用属性“unstack”,请尝试使用“apply”方法
                           Volume  SummedVolume
Date       Time  Venue
2015-09-14 17:00 NYSE           0        0
                 ARCA           0        0
                 AMEX           0        0
                 NASDAQ         0        0
                 BATS           0        0

                           Volume  SummedVolume
Date       Time  Venue
2015-09-14 17:00 NYSE           0        0
                 ARCA           0        0
                 AMEX           0        0
                 NASDAQ         0        0
                 BATS           0        0
df2 = (df.reset_index()
       .groupby(['tradeDate', 'time', 'exchange'])
       .first()  # Given that the data is unique by selected grouping
       .unstack(['exchange', 'time'])
pd.ewma(df2, span=20)