0

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

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 有一个 resample 函数,但我不知道如何将它应用到我的二级索引,同时根据一级索引将数据保持在离散类别中:(

另外,我想迭代我的一级索引,但显然

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

不起作用,因为因为'Trial'是索引 pandas 找不到它。

4

1 回答 1

1

嗯,这不是我见过的最漂亮的,但从一个看起来像的框架

>>> 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
于 2013-11-20T22:29:51.533 回答