2015-06-18 20 views
6

Sto imparando i panda e sono rimasto bloccato con questo problema qui.Aggiunta di una colonna booleana in Panda Dataframe

Ho creato un dataframe che tiene traccia di tutti gli utenti e il numero di volte in cui hanno fatto qualcosa.

Per comprendere meglio il problema che ho creato questo esempio:

import pandas as pd 
data = [ 
    {'username': 'me', 'bought_apples': 2, 'bought_pears': 0}, 
    {'username': 'you', 'bought_apples': 1, 'bought_pears': 1} 
] 
df = pd.DataFrame(data) 
df['bought_something'] = df['bought_apples'] > 0 or df['bought_pears'] > 0 

Nell'ultima riga voglio aggiungere una colonna che indica se l'utente ha comprato qualcosa a tutti.

Questo errore si apre:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Capisco il punto di ambiguità di Panda Series (also explained here), ma non ho potuto relazione con il problema.

È interessante notare che questo funziona

df['bought_something'] = df['bought_apples'] > 0 

Qualcuno mi può aiutare?

risposta

11

È possibile chiamare sum row-saggio e confrontare se questo è superiore a 0:

In [105]: 
df['bought_something'] = df[['bought_apples','bought_pears']].sum(axis=1) > 0 
df 

Out[105]: 
    bought_apples bought_pears username bought_something 
0    2    0  me    True 
1    1    1  you    True 

Per quanto riguarda il tentativo di originale, il messaggio di errore che si sta dicendo che è ambiguo per confrontare uno scalare con una matrice, se si vuole or condizioni booleane allora avete bisogno di usare l'operatore a bit | e avvolgere le condizioni indicate tra parentesi a causa di precedenza degli operatori:

In [111]: 
df['bought_something'] = ((df['bought_apples'] > 0) | (df['bought_pears'] > 0)) 
df 

Out[111]: 
    bought_apples bought_pears username bought_something 
0    2    0  me    True 
1    1    1  you    True 
2

T Il motivo di questo errore è che usi "o" per "unire" due vettori booleani invece di uno scalare booleano. Ecco perché dice che è ambiguo.

Problemi correlati