在Pandas

时间:2016-05-30 07:09:59

标签: python excel pandas pivot-table

1。背景

.xls文件我现在在不同站点的许多方面都包含一些多污染物参数。

我在下面创建了一个简化的数据框作为插图:

enter image description here

一些声明:

  1. 站点包含监控站点属性。在这种情况下,网站 S1 S2 是此处唯一的两个位置。

  2. 时间包含不同站点的监控周期。

  3. 物种 A& B表示已检测到两种化学污染物。

  4. 浓度是每个物种的一个关键参数(A& B)代表浓度。请注意,物种A的浓度应平行测量两次。

  5. P Q 是两种不同的分析实验。由于物种 A 有两个样本,它有 P1 P2 P3 & Q1 Q2 分别作为分析结果。物种 B 只能通过 P 进行分析。因此, P1 P2 P3 是唯一的参数。

  6. 在阅读了一些关于使用 Pandas 操纵 pivot_table 的帖子之后,我想尝试一下。

    2。我的目标

    我在Excel中手动显示了我的目标文件构造,如下所示:

    enter image description here

    3。我的工作

    df = pd.ExcelFile("./test_file.xls")
    df = df.parse("Sheet1")
    pd.pivot_table(df,index = ["Site","Time","Species"])
    

    结果如下:

    enter image description here

    更新

    我想弄清楚的是创建两列 P & Q 及其下方的子列。

    我已重新上传我的测试文件here。任何有兴趣的人都可以下载。

    • P Q 测试分别针对物种A的每个样本。
    • Conc 测试适合他们。

    任何建议都会受到赞赏!

1 个答案:

答案 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