# Add column in dataframe from list

I have a dataframe with some columns like this:

```    A   B   C
0
4
5
6
7
7
6
5
```

The possible range of values in A are only from 0 to 7.

Also, I have a list of 8 elements like this:

```    List=[2,5,6,8,12,16,26,32]  //There are only 8 elements in this list
```

If the element in column A is n , I need to insert the n th element from the List in a new column, say 'D'.

How can I do this in one go without looping over the whole dataframe?

The resulting dataframe would look like this:

```    A   B   C   D
0           2
4           12
5           16
6           26
7           32
7           32
6           26
5           16
```

Note: The dataframe is huge and iteration is the last option option. But I can also arrange the elements in 'List' in any other data structure like dict if necessary.

IIUC, if you make your (unfortunately named) `List` into an `ndarray`, you can simply index into it naturally.

```    >>> import numpy as np
>>> m = np.arange(16)*10
>>> m[df.A]
array([  0,  40,  50,  60, 150, 150, 140, 130])
>>> df["D"] = m[df.A]
>>> df
A   B   C    D
0   0 NaN NaN    0
1   4 NaN NaN   40
2   5 NaN NaN   50
3   6 NaN NaN   60
4  15 NaN NaN  150
5  15 NaN NaN  150
6  14 NaN NaN  140
7  13 NaN NaN  130
```

Here I built a new `m`, but if you use `m = np.asarray(List)`, the same thing should work: the values in `df.A` will pick out the appropriate elements of `m`.

Note that if you're using an old version of `numpy`, you might have to use `m[df.A.values]` instead-- in the past, `numpy` didn't play well with others, and some refactoring in `pandas` caused some headaches. Things have improved now.

From: stackoverflow.com/q/26666919