vishwajeet Mane
vishwajeet Mane

Reputation: 344

How to apply condtion on two columns in pandas

I have a pandas dataframe (df) like below.

       value        date    count1  hours   column_name
 0      eps     2021-02-17  127185   0       EPS
 1      eps     2021-02-17  129792   1       EPS
 2      eps     2021-02-17  155645   2       EPS
 3      eps     2021-02-17  160214   4       EPS
 4      eps     2021-02-17  164315   5       EPS
 5      eps     2021-02-16  164987   1       EPS

And I want new dataframe which does not contain record of date 2021-02-17 and hours=1. For these i try these

     df.loc[(df['date1']<='2021-02-17') & (df['hours']!= 1)]

It give output like below :-

       value        date    count1  hours   column_name
 0      eps     2021-02-17  127185   0       EPS
 1      eps     2021-02-17  155645   2       EPS
 2      eps     2021-02-17  160214   4       EPS
 3      eps     2021-02-17  164315   5       EPS

But I want like below :-

       value        date    count1  hours   column_name
 0      eps     2021-02-17  127185   0       EPS
 1      eps     2021-02-17  155645   2       EPS
 2      eps     2021-02-17  160214   4       EPS
 3      eps     2021-02-17  164315   5       EPS
 4      eps     2021-02-16  164987   1       EPS

Upvotes: 0

Views: 42

Answers (2)

sophocles
sophocles

Reputation: 13831

You need to use the operator | instead of &:

import pandas as pd

#if needed you can change your 'date' to datetime
df['date'] = pd.to_datetime(df['date'])

out = df.loc[(df['date']!='2021-02-17') | (df['hours']!=1)]

  value       date  count1  hours column_name
0   eps 2021-02-17  127185      0         EPS
1   eps 2021-02-17  129792      1         EPS
2   eps 2021-02-17  155645      2         EPS
3   eps 2021-02-17  160214      4         EPS
4   eps 2021-02-17  164315      5         EPS
5   eps 2021-02-16  164987      1         EPS

Upvotes: 2

jezrael
jezrael

Reputation: 863331

Compare both for not equal by !=, change | for bitwise OR and for correct ouput need datetimes:

df['date'] = pd.to_datetime(df['date'])
df =  df.loc[(df['date'] != '2021-02-17') | (df['hours'] != 1)]
print (df)
  value       date  count1  hours column_name
0   eps 2021-02-17  127185      0         EPS
2   eps 2021-02-17  155645      2         EPS
3   eps 2021-02-17  160214      4         EPS
4   eps 2021-02-17  164315      5         EPS
5   eps 2021-02-16  164987      1         EPS

Upvotes: 2

Related Questions