seleccionar filas en el marco de datos de pandas según las condiciones

Arman Mojaver

Tengo el siguiente código:

import pandas as pd
import random


a = [random.randint(0, 1) for i in range(30)]
b = [random.randint(0, 1) for i in range(30)]

print(a)
print(b)

df = pd.DataFrame([a, b])
df = df.T

columns = ['column1', 'column2']
df.columns = columns
print(df)

que crea un marco de datos almacenado en la variable 'df'. Consta de 2 columnas (columna1 y columna2) llenas de ceros y unos aleatorios.

Este es el resultado que obtuve cuando ejecuté el programa (si intentas ejecutarlo, no obtendrás exactamente el mismo resultado debido a la generación de randomint).

    column1  column2
0         0        1
1         1        0
2         0        1
3         1        1
4         0        1
5         1        1
6         0        1
7         1        1
8         1        0
9         0        1
10        0        0
11        1        1
12        1        1
13        0        1
14        0        0
15        0        1
16        1        1
17        1        1
18        0        1
19        1        0
20        0        0
21        1        0
22        0        1
23        1        0
24        1        1
25        0        0
26        1        1
27        1        0
28        0        1
29        1        0

Me gustaría crear un filtro en la columna2, mostrando solo los grupos de datos cuando hay tres o más 1 en una fila. La salida sería algo como esto:

    column1  column2
2         0        1
3         1        1
4         0        1
5         1        1
6         0        1
7         1        1

11        1        1
12        1        1
13        0        1

15        0        1
16        1        1
17        1        1
18        0        1

Dejé un espacio entre los grupos para mayor claridad visual, pero la salida real no tendría los espacios vacíos en el marco de datos.

Me gustaría hacerlo de la siguiente manera.

filter1 = (some boolean condition) &/| (maybe some other stuff)
final_df = df[filter1]

Gracias

ansev

Podemos usar GroupBy.transform.

n = 3
blocks = df['column2'].ne(df['column2'].shift()).cumsum()
m1 = (df.groupby(blocks)['column2']
        .transform('size').ge(n))
m2 = df['column2'].eq(1)
df_filtered = df.loc[m1 & m2]
# Alternative without df['column2'].eq(1)
#df_filtered = df.loc[m1.mul(df['column2'])]
print(df_filtered)

Producción

    column1  column2
2         0        1
3         1        1
4         0        1
5         1        1
6         0        1
7         1        1

11        1        1
12        1        1
13        0        1

15        0        1
16        1        1
17        1        1
18        0        1

Si la columna2 realmente contiene solo 1 y 0 en su DataFrame original, entonces podemos usar transform('sum')en su lugartransform('size')


bloques tiene un nuevo valor cada vez que el valor en column2cambia

print(blocks)
0      1
1      2
2      3
3      3
4      3
5      3
6      3
7      3
8      4
9      5
10     6
11     7
12     7
13     7
14     8
15     9
16     9
17     9
18     9
19    10
20    10
21    10
22    11
23    12
24    13
25    14
26    15
27    16
28    17
29    18
Name: column2, dtype: int64

Alternativa

A menudo uso este código en mis proyectos y llegué a la conclusión de que, en general, puede ser un poco más rápido de usar Series.map+ Series.value_counts. La diferencia de rendimiento entre los dos métodos nunca será grande y puede elegir el que desee. Pero suelo usar este último que he explicado y creo que valió la pena mencionarlo

%%timeit
m1 = blocks.map(blocks.value_counts().ge(n))
1.41 ms ± 122 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)


%%timeit
m1 = (df.groupby(blocks)['column2']
        .transform('size').ge(n))
2.12 ms ± 226 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Dividir / descomponer celdas en varias filas según las condiciones en el marco de datos de pandas

etiquetado de filas en el marco de datos, según las condiciones dinámicas

Seleccionar columnas de un marco de datos de pandas según las condiciones de las columnas

Seleccionar filas de un marco de datos en función de dos condiciones en Pandas Python

Soltar columnas en el marco de datos de pandas según las condiciones

El marco de datos de Pandas cambia los valores en una columna según las condiciones

Complete las fechas en el marco de datos de pandas según las filas anteriores

Eliminar duplicados según las condiciones en las filas de un marco de datos

Python / Pandas: elimine filas según las condiciones a continuación en un marco de datos (similar a eliminar duplicados pero no igual)

obtener el recuento de filas del marco de datos según las condiciones

obtener el recuento de filas del marco de datos según las condiciones

Cómo extraer filas de un marco de datos de pandas según las condiciones basadas en otro marco de datos

Seleccionar filas en el marco de datos de pandas

Una forma de iterar a través de filas y columnas (en un marco de datos panda), seleccionar filas y columnas según las condiciones para poner en panda otro marco de datos

Bucle de valores en un marco de datos según las condiciones de las filas en otro

¿Agrupar el marco de datos de Pandas según las condiciones?

cambiar el marco de datos de la columna de valor en r según las condiciones

dividir filas en el marco de datos de pandas según los espacios en las entradas de la celda

Eliminar filas en un marco de datos según el contenido de las filas

Reemplazo de valores en el marco de datos con 0 y 1 según las condiciones

Los pandas agrupan las filas en un marco de datos según el valor de columna específico

Los pandas de Python crean una nueva fila dentro del marco de datos según las condiciones en ciertas filas de arriba

Los pandas de Python crean una nueva fila dentro del marco de datos según las condiciones en ciertas filas de arriba

seleccionar columnas en el marco de datos de pandas según el valor de otras columnas

Cómo eliminar N filas de un marco de datos, según las condiciones

Cómo eliminar N filas de un marco de datos, según las condiciones

eliminar filas de un marco de datos en función de las condiciones de otro marco de datos en pandas Python

Reordenar el marco de datos en columnas según los nombres de las filas R

Divida las filas en el marco de datos según la marca de tiempo usando R

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  3. 3

    uitableview delete button image in iOS

  4. 4

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  5. 5

    Swift / Firebase : Facebook 사용자가 계정을 만들 때 Firebase 데이터베이스에 제대로 저장하려면 어떻게해야합니까?

  6. 6

    caída condicional de filas desde un marco de datos de pandas

  7. 7

    Link library in Visual Studio, why two different ways?

  8. 8

    Pagination class not getting applied in html

  9. 9

    Que signifie Decimal (-1)?

  10. 10

    UIButton textLabel with different fonts

  11. 11

    WPF pleine largeur DataGridColumn sur la largeur de DataGrid

  12. 12

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  13. 13

    matplotlib로 그래프를 그리는 동안 커서 위치에서 날짜 / 시간을 볼 수 없습니다. "DateFormatter에서 x = 0 값을 찾았습니다"라는 오류가 발생합니다.

  14. 14

    ¿Es posible en Windows evitar que otras aplicaciones se enganchen en las DLL del sistema?

  15. 15

    Error de la base de datos de Android Firebase: Permiso denegado al depurar en un teléfono

  16. 16

    Pandas: suma filas de DataFrame para columnas dadas

  17. 17

    ggplot2: gráfico con líneas y puntos para problemas de leyenda de dos conjuntos de datos

  18. 18

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  19. 19

    Recherche de la position d'index d'une valeur dans r dataframe

  20. 20

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  21. 21

    nested observables executed one after the other after termination

CalienteEtiquetas

Archivo