通过命令pandas python向列添加值

时间:2015-11-06 21:20:12

标签: python pandas rows

我有一个数据集,我通过

读到
data = pd.read_excel('....\data.xlsx')
data = data.fillna(0)

我把它们全部变成了字符串

data['Block']=data['Block'].astype(str)
data['Concentration']=data['Concentration'].astype(str)
data['Name']=data['Name'].astype(str)

数据看起来像这样

Block             Con        Name  
  1               100         A
  1               100         A
  1               100         A
  1               33          B
  1               33          B
  1               33          B
  1               0           c
  1               0           c
  1               0           c
  2               100         A
  2               100         A
  2               100         A
  2               100         B
  2               100         B
  2               100         B
  2               33          B
  2               33          B
  2               33          B
  2               0           c
  2               0           c
  2               0           c
 ...
 ...
  24               0          E

我插入了一个'replicate'列:

 data['replicate'] = '' 

数据现在看起来像这样

Block             Con        Name      replicate
  1               100         A
  1               100         A
  1               100         A
  1               33          B
  1               33          B
  1               33          B
  1               0           c
  1               0           c
  1               0           c
  2               100         A
  2               100         A
  2               100         A
  2               100         B
  2               100         B
  2               100         B
  2               33          B
  2               33          B
  2               33          B
  2               0           c
  2               0           c
  2               0           c
 ...
 ...
  24               0          E

每个Block | con | name组合有3个重复,我如何用1,2,3填充'replicate'列?

所需的输出将是

Block             Con        Name      replicate
  1               100         A           1
  1               100         A           2
  1               100         A           3
  1               33          B           1
  1               33          B           2
  1               33          B           3
  1               0           c           1
  1               0           c           2
  1               0           c           3
  2               100         A           1
  2               100         A           2
  2               100         A           3
  2               100         B           1
  2               100         B           2
  2               100         B           3
  2               33          B           1
  2               33          B           2
  2               33          B           3
  2               0           c           1
  2               0           c           2
  2               0           c           3
 ...
 ...
  24               0          E           3

伪代码将是:

 for b in data.block:
      for  c in data.con:
          for n in data.name:
              for each b|c|n combination:
                  if the same:
                   assign '1' to data.replicate
                   assign '2' to data.replicate
                   assign '3' to data.replicate

我在网上搜索过但没有找到任何解决方案,我不确定使用哪种功能。

2 个答案:

答案 0 :(得分:1)

看起来像是cumcount

In [11]: df["Replicate"] = df.groupby(["Block", "Con", "Name"]).cumcount() + 1

In [12]: df
Out[12]:
    Block  Con Name  Replicate
0       1  100    A          1
1       1  100    A          2
2       1  100    A          3
3       1   33    B          1
4       1   33    B          2
5       1   33    B          3
6       1    0    c          1
7       1    0    c          2
8       1    0    c          3
9       2  100    A          1
10      2  100    A          2
11      2  100    A          3
12      2  100    B          1
13      2  100    B          2
14      2  100    B          3
15      2   33    B          1
16      2   33    B          2
17      2   33    B          3
18      2    0    c          1
19      2    0    c          2
20      2    0    c          3

cumcount枚举每组中的行(从0开始)。

答案 1 :(得分:0)

您可以使用numpy.tile

import numpy as np
replicate_arr = np.tile(['1', '2', '3'], len(data)/3)
data['replicate'] = replicate_arr