我有许多批生物数据,每批都是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
)也是受欢迎的。
答案 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()
。