根据条件 pandas python 遍历行

iterate through rows on condition pandas python

我有一个 excel table 我读入了数据 = pd.read_excel('..data.xlsx')

Block   Concentration   Name    Replicate   Value
1            100          A          1        1446
1            100          A          2        25
1            100          A          3        12
1            33           A          1        111
1            33           A          2        222
1            33           A          3        1234
...
1            0            C          3         86
..
2            100          A          1        634
2            100          A          2        93
2            100          A          3        287
2            33           A          1        97234
2            33           A          2        1222
2            33           A          3        456  
...  
2            0            D          3         9800
...
...

24           0            E         3           93948

有24块,4种浓度,很多名字。每个 'Block|Concentration|Name' 组合有三个重复,指向唯一的 'Value' 个数字。

我创建了一个字典 'd',散列为:

 hash{Block|Concentration|Name|Replicate} -> value 

伪代码:

 for block 1-> 24:
     for each concentration:
          print (concentration)
          for each  name:
               for replicate 1-> 3:
                   print  key of hash{Block|Concentration|Name|Replicate} 

我的代码:

for b in data.Block:
   for c in data.Concentration:
    print(c)
    for n in data.Name:
        for r in data.Replicate:
            print(d)

结果一团糟,我认为它正在为每个循环打印出所有内容。

我想到的输出结构(输出不需要格式):

 Block1         
Concentration            Name A                  Name B          Name C..   
  100                 1446   25  12          ..   ..    ..        ...
  33                  111    222  1234       ..   ..    ..
  10                  ..                     ..   ..    ..
  0                   ..                     ..   ..    ..


Block2         
Concentration            Name A                  Name B          Name C..   
  100                 634   93  287          ..   ..    ..        ...
  33                  97234 1222 456         ..   ..    ..
  10                  ..                     ..   ..    ..
  0                   ..                     ..   ..    ..

..
..
..
Block 24 ...

您可以使用 pivot_table:

In [11]: df
Out[11]:
    Block  Con Name  Replicate  Mean
0       1  100    A          1    20
1       1  100    A          2    10
2       1  100    A          3    30
3       1  100    B          1    40
4       1  100    B          2    12
5       1  100    B          3    23
6       1   33    A          1    56
7       1   33    A          2   234
8       1   33    A          3   377
9       1   33    B          1   434
10      1   33    B          2  1232
11      1   33    B          3   233

In [12]: df.pivot_table(index=["Block", "Con"], columns=["Name", "Replicate"], values="Mean")
Out[12]:
Name        A              B
Replicate   1    2    3    1     2    3
Block Con
1     33   56  234  377  434  1232  233
      100  20   10   30   40    12   23