Home > Blockchain >  python pandas if for
python pandas if for

Time:02-16

I have a CSV file with many columns in it. Let me give you people an example.

A B C D 
1 1 0  
1 1 1 
0 0 0

I want to do this.

if col-A first row value == 1 AND col-B first row value == 1 AND col-C first row value == 1;
        then put "FIC" in first row of Col-D
   else:
        enter "PI"

I am using pandas.

There are more than 1500 rows and I want to do this for every row. How can I do this? Please help

CodePudding user response:

If need test if all values are 1 per filtered columns use:

df['D'] = np.where(df[['A','B','C']].eq(1).all(axis=1), 'FIC','PI')

Or if only 0,1 values in filtered columns:

df['D'] = np.where(df[['A','B','C']].all(axis=1), 'FIC','PI')

EDIT:

print (df)
   A  B    C   D
0  1  1  NaN NaN
1  1  1  1.0 NaN
2  0  0  0.0 NaN


m1 = df[['A','B','C']].all(axis=1)
m2 = df[['A','B','C']].isna().any(axis=1)
df['D'] = np.select([m2, m1], ['ZD', 'FIC'],'PI')
print (df)
   A  B    C    D
0  1  1  NaN   ZD
1  1  1  1.0  FIC
2  0  0  0.0   PI

CodePudding user response:

Without numpy you can use:

df['D'] = df[['A', 'B', 'C']].astype(bool).all(1).replace({True: 'FIC', False: 'PI'})
print(df)

# Output
   A  B  C    D
0  1  1  0   PI
1  1  1  1  FIC
2  0  0  0   PI
  • Related