Replacing row values in pandas

Replace 'A' with 1 and 'B' with 2.

df = df.replace(['A', 'B'],[1, 2])

This is done over the entire DataFrame no matter the column.

However, we can target a single column in this way

df[column] = df[column].replace(['A', 'B'],[1, 2])

More in-depth examples are available HERE.


The simplest way should be this one:

df.loc[[3],0:1] = 200,10

In this case, 3 is the third row of the data frame while 0 and 1 are the columns.

This code instead, allows you to iterate over each row, check its content and replace it with what you want.

target = [101,3]
mod = [200,10]

for index, row in df.iterrows():
    if row[0] == target[0] and row[1] == target[1]:
        row[0] = mod[0]
        row[1] = mod[1]

print(df)

For the single row case:

In [35]:

df.loc[(df[0]==101) & (df[1]==3)] = [[200,10]]
df
Out[35]:
     0   1
0  100   0
1  100   1
2  101   2
3  200  10
4  102   4
5  102   5

For the multiple row-case the following would work:

In [60]:

a = np.array(([100, 100, 101, 101, 102, 102],
                 [0,1,3,3,3,4]))
df = pd.DataFrame(a.T)
df
Out[60]:
     0  1
0  100  0
1  100  1
2  101  3
3  101  3
4  102  3
5  102  4
In [61]:

df.loc[(df[0]==101) & (df[1]==3)] = 200,10
df
Out[61]:
     0   1
0  100   0
1  100   1
2  200  10
3  200  10
4  102   3
5  102   4

For multi-row update like you propose the following would work where the replacement site is a single row, first construct a dict of the old vals to search for and use the new values as the replacement value:

In [78]:

old_keys = [(x[0],x[1]) for x in old_vals]
new_valss = [(x[0],x[1]) for x in new_vals]
replace_vals = dict(zip(old_keys, new_vals))
replace_vals
Out[78]:
{(100, 0): array([300,  20]),
 (101, 3): array([200,  10]),
 (102, 5): array([400,  30])}

We can then iterate over the dict and then set the rows using the same method as my first answer:

In [93]:

for k,v in replace_vals.items():
    df.loc[(df[0] == k[0]) & (df[1] == k[1])] = [[v[0],v[1]]]
df
     0  1
0  100  0
     0  1
5  102  5
     0  1
3  101  3
Out[93]:
     0   1
0  300  20
1  100   1
2  101   2
3  200  10
4  102   4
5  400  30