MultiIndex数据透视表pandas python

时间:2015-11-10 23:16:35

标签: python pandas

import pandas as pd
data = pd.read_excel('.../data.xlsx')

内容如下所示:

Out[57]: 
        Block    Concentration           Name   Replicate           value
0         1            100           GlcNAc2          1               321
1         1            100           GlcNAc2          2               139
2         1            100           GlcNAc2          3               202
3         1             33           GlcNAc2          1                86
4         1             33           GlcNAc2          2               194
5         1             33           GlcNAc2          3               452
6         1             10           GlcNAc2          1               140
7         1             10           GlcNAc2          2               285

...... ...... ...... ......

1742     24              0      Print buffer          1             -9968
1743     24              0      Print buffer          2             -4526
1744     24              0      Print buffer          3             14246

[1752行x 5列]

数据透视表看起来像这样(只是大表的一部分):

 newdata = data.pivot_table(index=["Block", "Concentration"],columns=["Name","Replicate"], values="value")

enter image description here

我的问题:

我如何填写' 0'浓度的GlcNAc2'和' Man5GIcNAc2'使用'打印缓冲区'值?

所需的输出:

enter image description here

我一直在网上搜索,并没有真正找到类似的东西。我甚至没有找到一种指向“打印缓冲区”的方法。来自'名称'的值列。

来自MultiIndex /高级索引章节,它说要使用

df.xs('one', level='second') 

但它在我的情况下不起作用,它不适用于数据透视表,我不知道为什么,我感到困惑。数据透视表是多索引吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将Name == Print buffer的值复制到包含Name == 'GlcNAc2''Man5GIcNAc2'以及concentration = 0的列。

这样做的一种方法是复制原始数据集中的行:

selection = data[data["Name"] == "Print buffer"]'

selection.loc[:, "Name"] = "GlcNAc2"
data = pd.concat([data, selection])

selection.loc[:, "Name"] = "Man5GIcNAc2"
data = pd.concat([data, selection])

然后应用pivot_table。

备注:我不确定我理解你的问题。我感到困惑的是,在你的照片中,值Block == 1从第一张图片变为第二张。这只是一个错误还是你问题的核心?