Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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 仅在知道结果测量计数的情况下对数据帧重新采样_Python_Pandas_Time Series_Resampling_Multi Index - Fatal编程技术网

Python 仅在知道结果测量计数的情况下对数据帧重新采样

Python 仅在知道结果测量计数的情况下对数据帧重新采样,python,pandas,time-series,resampling,multi-index,Python,Pandas,Time Series,Resampling,Multi Index,我有一个数据框,看起来像这样: Trial Measurement Data 0 0 12 1 4 2 12 1 0 12 1 12 2 0 12 1 12

我有一个数据框,看起来像这样:

Trial    Measurement    Data
    0              0      12 
                   1       4
                   2      12
    1              0      12
                   1      12
    2              0      12
                   1      12
                   2     NaN
                   3      12
Trial    Measurement    Data
    0              0       8 
                   1       8
    1              0      12
                   1      12
    2              0      12
                   1      12
我想对我的数据重新取样,这样每次试验只有两次测量 所以我想把它变成这样:

Trial    Measurement    Data
    0              0      12 
                   1       4
                   2      12
    1              0      12
                   1      12
    2              0      12
                   1      12
                   2     NaN
                   3      12
Trial    Measurement    Data
    0              0       8 
                   1       8
    1              0      12
                   1      12
    2              0      12
                   1      12
这个相当不寻常的任务源于这样一个事实,即我的数据在刺激呈现部分有一个有意的抖动

我知道pandas具有重采样功能,但我不知道如何将其应用于我的二级索引,同时根据一级索引将数据保留在离散类别中:(

另外,我想在我的第一级索引上进行迭代,但显然

for sub_df in np.arange(len(df['Trial'].max()))

不起作用,因为“试用”是一个索引,熊猫找不到它。

好吧,这不是我见过的最漂亮的,但从一个看起来像

>>> df
   Trial  Measurement  Data
0      0            0    12
1      0            1     4
2      0            2    12
3      1            0    12
4      1            1    12
5      2            0    12
6      2            1    12
7      2            2   NaN
8      2            3    12
然后,我们可以手动构建两个“类似平均值”的对象,然后使用
pd.melt
重塑输出:

avg = df.groupby("Trial")["Data"].agg({0: lambda x: x.head((len(x)+1)//2).mean(), 
                                       1: lambda x: x.tail((len(x)+1)//2).mean()}) 
result = pd.melt(avg.reset_index(), "Trial", var_name="Measurement", value_name="Data")
result = result.sort("Trial").set_index(["Trial", "Measurement"])
产生

>>> result

                   Data
Trial Measurement      
0     0               8
      1               8
1     0              12
      1              12
2     0              12
      1              12

(0,1)如何变为8而不是12,但(2,1)如何变为6(将NaN视为零而不是缺失数据)?重采样规则是什么?前半部分数据的平均值和最后一部分数据的平均值,允许重叠,并将NaN设置为0?我没有必须遵守的预定义重采样规则。我给出示例是因为它看起来很直观。实际上,最好将NaN视为缺失数据。由于重叠,第一个值变为8,y是的。我仍然认为这是最好的方法。我每次试验有大约256个值,所以一个值的重叠在任何情况下都不会有什么不同。你需要像这样索引它吗,它可能更容易,因为只是列和使用groupbyno,实际上我这样索引它,认为这样会使内容更简单:-/我可以使它更通用,以便它执行ese操作不仅仅针对“数据”?实际上我有11个数据列^^