如何将三维数据集减少为多变量建模的二维数据集

时间:2018-01-26 21:53:19

标签: python r dataframe

我有许多批生物数据,每批都是2D形式,有不同的变量(列)和时间点(行)。以下是一个例子:

Batch1  VA  VB  VC
Day1    2   4   6
Day2    33  23  12
Day3    124 223 432

我还有一个数据集,用不同的质量数字(作为列)显示每个批次的质量:

Batch   QA      QB      QC
Batch1  0.40    0.22    0.72
Batch2  0.85    0.76    0.18
Batch3  0.38    0.15    0.15

我们可以假设上述数据集为我们提供了某种3D数据。目的是进行多变量分析,在所有这些批次上建立模型,以预测质量。

我可以转换批处理数据集(使用unpivot),如下所示,因此每行代表一个批处理。然后,我正在考虑在表中添加列以获得质量数字,以便我可以根据变量对质量进行建模。

Day1    Day1    Day1    Day2    Day2    Day2    Day3    Day3    Day3
VA      VB      VC      VA      VB      VC      VA      VB      VC
2       4       6       33      23      12      124     223     432

现在我有一个表,其中包含两行标题(时间和变量),用于所有时间序列变量。我的问题是,如果有一种替代方法可以让我在没有这么多数据转换步骤的情况下开始建模(或者至少可以节省一些步骤)?如果没有,是否有任何建议将两行标题压缩为一行?我现在正在研究python / pandas解决方案,但其他任何内容(例如R)也是受欢迎的。

1 个答案:

答案 0 :(得分:0)

在Pandas中,您可以像这样阅读第一个文件:

df = pd.read_table('t.txt', delim_whitespace=True, index_col=0)

它为您提供了一个DataFrame:

         VA   VB   VC
Batch1               
Day1      2    4    6
Day2     33   23   12
Day3    124  223  432

然后sr = df.unstack()会为您提供一个包含MultiIndex的系列:

    Batch1
VA  Day1        2
    Day2       33
    Day3      124
VB  Day1        4
    Day2       23
    Day3      223
VC  Day1        6
    Day2       12
    Day3      432

然后连接索引字符串(根据品味调整):

sr.index = sr.index.get_level_values(0) + '_' + sr.index.get_level_values(1)

现在你有:

VA_Day1      2
VA_Day2     33
VA_Day3    124
VB_Day1      4
VB_Day2     23
VB_Day3    223
VC_Day1      6
VC_Day2     12
VC_Day3    432

如果您希望排序顺序为第一天(如您的问题所示),请执行sr = df.T.unstack()而不是sr = df.unstack()