.xls文件我现在在不同站点的许多方面都包含一些多污染物参数。
我在下面创建了一个简化的数据框作为插图:
一些声明:
列站点包含监控站点属性。在这种情况下,网站 S1 , S2 是此处唯一的两个位置。
列时间包含不同站点的监控周期。
物种 A& B表示已检测到两种化学污染物。
浓度是每个物种的一个关键参数(A& B)代表浓度。请注意,物种A的浓度应平行测量两次。
P 和 Q 是两种不同的分析实验。由于物种 A 有两个样本,它有 P1 , P2 , P3 & Q1 , Q2 分别作为分析结果。物种 B 只能通过 P 进行分析。因此, P1 , P2 , P3 是唯一的参数。
在阅读了一些关于使用 Pandas 操纵 pivot_table 的帖子之后,我想尝试一下。
我在Excel中手动显示了我的目标文件构造,如下所示:
df = pd.ExcelFile("./test_file.xls")
df = df.parse("Sheet1")
pd.pivot_table(df,index = ["Site","Time","Species"])
结果如下:
我想弄清楚的是创建两列 P & Q 及其下方的子列。
我已重新上传我的测试文件here。任何有兴趣的人都可以下载。
任何建议都会受到赞赏!
答案 0 :(得分:1)
IIUC
您需要相同的数据框,但具有更好的列索引。
创建第一级:
level0 = df.columns.str.extract(r'([^\d]*)', expand=False)
然后将一个多索引分配给columns属性。
df.columns = pd.MultiIndex.from_arrays([level0, df.columns])
看起来像:
print df
Conc P Q
Conc P1 P2 P3 Q1 Q2
Site Time Species
S1 20141222 A 0.79 0.02 0.62 1.05 0.01 1.73
20141228 A 0.13 0.01 0.79 0.44 0.01 1.72
20150103 B 0.48 0.03 1.39 0.84 NaN NaN
20150104 A 0.36 0.02 1.13 0.31 0.01 0.94
20150109 A 0.14 0.01 0.64 0.35 0.00 1.00
20150114 B 0.47 0.08 1.16 1.40 NaN NaN
20150115 A 0.62 0.02 0.90 0.95 0.01 2.63
20150116 A 0.71 0.03 1.72 1.71 0.01 2.53
20150121 B 0.61 0.03 0.67 0.87 NaN NaN
S2 20141222 A 0.23 0.01 0.66 0.44 0.01 1.49
20141228 A 0.42 0.06 0.99 1.56 0.00 2.18
20150103 B 0.09 0.01 0.56 0.12 NaN NaN
20150104 A 0.18 0.01 0.56 0.36 0.00 0.67
20150109 A 0.50 0.03 0.74 0.71 0.00 1.11
20150114 B 0.64 0.06 1.76 0.92 NaN NaN
20150115 A 0.58 0.05 0.77 0.95 0.01 1.54
20150116 A 0.93 0.04 1.33 0.69 0.00 0.82
20150121 B 0.33 0.09 1.33 0.76 NaN NaN