Python one-line boolean

Question:

Given df

    col1
0    -12
1    -64
2     24
3      2
4      6
5     75
6      3
7     10
8     42
9     15
10    14

I’m trying to make something like:

df_new

    col1
0      0
1      0
2      1
3      0
4      0
5      1
6      0
7      0
8      1
9      0
10     0

Where, if the number is greater than 15, then it is 1 and 0 otherwise. I tried to do it this way:

df_new = [1 for x in df if (x<15) else 0]

But it gives a syntax error.

Asked By: Strovic

||

Answers:

You can apply the condition to the entire df all at once:

new_df = df > 15

The result will be a boolean, but will behave as zeros and ones in all the ways that you care about.

As for your original expression, a ternary operator has the form [a if cond else b for x in iterable] while a filter looks like [a for x in iterable if cond]. Notice where the if goes in both cases.

Answered By: Mad Physicist

You can convert the booleans to ints like this:

df_new = (df>15).astype(int)
Answered By: Tim Roberts

While others are right about using the features specific to dataframes, your understanding of list comprehension syntax is only a little bit off.

[1 if x < 15 else 0 for x in df]

Or if parentheses help you to see what’s going on:

[(1 if x < 15 else 0) for x in df]
Answered By: Chris

Simply use where function.

import pandas as pd
import numpy as np
df=pd.DataFrame([-12,-64,24,2,6,75,3,10,42,15,14])
df=np.where(df>15,1,0)
df=pd.DataFrame(df)

Syntax : numpy.where(condition[, x, y])

Answered By: Mehmaam
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.