ag14
ag14

Reputation: 867

How can I use pandas dataframe where such that I get only the true rows and don't get anything if the condition is not true

So, let's say I have a pandas dataframe dfObject , say:

     A     B         C
1   red   square    big
2   green circle    small
3   blue  triangle  big

I am now trying to make another dataframe dfBigObject To do this, I want to choose only those rows from the dataframe which have big in the C column

So, dfBigObject should look like:

    A     B         C
1   red   square   big
2   blue  triangle big

I try to use df.where to do this but am unsuccessful.

This is what I am doing:

dfBigObject = dfObject.where(dfObject.C == 'big')

However, this is returned:

     A     B         C
1   red   square    big
2    
3   blue  triangle  big

What can I do?

Code to create dataframe:

dfObject = pd.DataFrame()
dfObject.set_value(1, 'A', 'red')
dfObject.set_value(1, 'B', 'square')
dfObject.set_value(1, 'C', 'big')
dfObject.set_value(2, 'A', 'green')
dfObject.set_value(2, 'B', 'circle')
dfObject.set_value(2, 'C', 'small')
dfObject.set_value(3, 'A', 'blue')
dfObject.set_value(3, 'B', 'triangle')
dfObject.set_value(3, 'C', 'big')

Upvotes: 2

Views: 87

Answers (2)

Andrew L
Andrew L

Reputation: 7038

Here's one way if you aren't trying to preserve the original shape of the dataframe (boolean indexing):

dfBigObject = dfObject[dfObject ['C'] == 'big']

Upvotes: 3

jezrael
jezrael

Reputation: 862641

I think you need boolean indexing or query:

dfBigObject = dfObject[dfObject['C'] == 'big']
print (dfBigObject)
      A         B    C
1   red    square  big
3  blue  triangle  big

Or:

dfBigObject = dfObject.query("C == 'big'")
print (dfBigObject)
      A         B    C
1   red    square  big
3  blue  triangle  big

Upvotes: 4

Related Questions