简体   繁体   中英

How to create a new column from dataframe based on a given condition

I would like to create a new column target based on the values on the source column. I simply want to assign values from this list [6,7,8,9,10,11,12,13] to the rows of the source column

   value    source
0   0.83    0
1   0.99    0
2   0.20    0
3   0.79    0
4   0.19    0
5   0.86    0
6   0.31    1
7   0.19    1
8   0.50    2
9   0.44    2
10  1.00    2
11  0.67    2
12  0.74    3
13  0.43    3
14  0.21    3
15  0.03    4
16  1.00    4
17  0.57    4
18  0.67    5
19  1.00    5

expected output

   value    source   target
0   0.83    0           6
1   0.99    0           7
2   0.20    0           8
3   0.79    0           9
4   0.19    0           10
5   0.86    0           11
6   0.31    1           6
7   0.19    1           7
8   0.50    2           6
9   0.44    2           7
10  1.00    2           8
11  0.67    2           9
12  0.74    3           6
13  0.43    3           7
14  0.21    3           8
15  0.03    4           6
16  1.00    4           7
17  0.57    4           8
18  0.67    5           6
19  1.00    5           7

Use GroupBy.cumcount with mapping by dictioanry created from list with enumerate :

L = [6,7,8,9,10,11,12,13] 
df['target'] = df.groupby('source').cumcount().map(dict(enumerate(L)))
print (df)
    value  source  target
0    0.83       0       6
1    0.99       0       7
2    0.20       0       8
3    0.79       0       9
4    0.19       0      10
5    0.86       0      11
6    0.31       1       6
7    0.19       1       7
8    0.50       2       6
9    0.44       2       7
10   1.00       2       8
11   0.67       2       9
12   0.74       3       6
13   0.43       3       7
14   0.21       3       8
15   0.03       4       6
16   1.00       4       7
17   0.57       4       8
18   0.67       5       6
19   1.00       5       7

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM