Home > Mobile >  Overwrite data frame value
Overwrite data frame value

Time:12-10

I have two data frame df and ddff

df data frame have 3 row and 5 columns

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[0,1,0,0,1], [1,0,0,1,0], [0,1,1,0,0]]))
df

     0   1   2   3   4
0    0   1   0   0   1
1    1   0   0   1   0
2    0   1   1   0   0

ddff data frame consist of neighbour columns of a particular columns which have 5 row and 3 column where the value of ddff data frame represent the column name of df

ddff = pd.DataFrame(np.array([[3,2,1], [4,2,3], [3,1,4], [4,1,2], [2,3,1]]))
ddff

    0   1   2
0   3   2   1
1   4   2   3
2   3   1   4
3   4   1   2
4   2   3   1

Now I need a final data frame where where df column neighbour's set to 1 (overwrite previous value)

expected output

    0  1  2  3  4
0   0  1  1  1  0
1   1  0  0  1  0
2   0  1  1  0  0

CodePudding user response:

You can filter the relevant column numbers from ddff, and set the values in those columns in the first row equal to 1 and set the values in the remaining columns to 0:

relevant_columns = ddff.loc[0]
df.loc[0,relevant_columns] = 1
df.loc[0,df.columns[~df.columns.isin(relevant_columns)]] = 0

Output:

   0  1  2  3  4
0  0  1  1  1  0
1  1  0  0  1  0
2  0  1  1  0  0

CodePudding user response:

You can use:

s = ddff.loc[0].values
df.loc[0] = np.where(df.loc[[0]].columns.isin(s),1,0)

>>> df

   0  1  2  3  4
0  0  1  1  1  0
1  1  0  0  1  0
2  0  1  1  0  0

Breaking it down:

>>> np.where(df.loc[[0]].columns.isin(s),1,0)
array([0, 1, 1, 1, 0])

# Before the update
>>> df.loc[0]
 0    0
1    1
2    0
3    0
4    1


# After the assignment back
0    0
1    1
2    1
3    1
4    0
  • Related