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个数据列^^