Tengo los siguientes pandas DataFrame.

   Id UserId    Name            Date                 Class  TagBased
0   2   23  Autobiographer  2016-01-12T18:44:49.267     3   False
1   3   22  Autobiographer  2016-01-12T18:44:49.267     3   False
2   4   21  Autobiographer  2016-01-12T18:44:49.267     3   False
3   5   20  Autobiographer  2016-01-12T18:44:49.267     3   False
4   6   19  Autobiographer  2016-01-12T18:44:49.267     3   False

Quiero iterar a través de la columna "TagBased" y poner los ID de usuario en una lista donde TagBased = True. He usado el siguiente código pero no obtengo ningún resultado que sea incorrecto porque hay 18 valores verdaderos en TagBased.

user_tagBased = []

for i in range(len(df)):
    if (df['TagBased'] is True):
        user_TagBased.append(df['UserId'])
print(user_TagBased)

Output: []
0
Ishan Dutta 24 jun. 2020 a las 18:12

2 respuestas

La mejor respuesta

Como otros sugieren, ¡usar el filtrado condicional de Pandas es la mejor opción aquí sin usar bucles! Sin embargo, para explicar por qué su código no funcionó como se esperaba:

Usted está agregando df['UserId'] en un ciclo for mientras que df['UserId'] es una columna. Lo mismo ocurre con la verificación df['TagBased'], que también es una columna.

Supongo que desea agregar el ID de usuario en la fila actual en el ciclo for.

Puede hacerlo iterando a través de las filas df:

user_tagBased = []

for index, row in df.iterrows():
    if row['TagBased'] == 'True': # Because it is a string and not a boolean here
        user_tagBased.append(row['UserId'])
1
mabergerx 24 jun. 2020 a las 15:30

Pruebe esto, no necesita usar bucles para esto:

user_list = df[df['TagBased']==True]['UserId'].tolist()
print(user_list)

[19, 19]
1
NYC Coder 24 jun. 2020 a las 15:18