Cómo obtener el número de elementos en filas, así como la comprobación de un elemento está o no presente, y, finalmente, seguir la primera fila en python?

0

Pregunta

Supongamos que tengo un marco de datos de la siguiente manera:

 df = pd.DataFrame({
        'Column A': [12,12,12, 13, 15, 16, 141, 141, 141, 141],
         'Column B':['Apple' ,'Apple' ,'Orange' ,'Apple' , np.nan, 'Orange', 'Apple', np.nan, 'Apple', 'Apple']}) 

Basado en estas condiciones:

  • Si los valores en la columna a se repiten, a continuación, el recuento de la palabra "Naranja" en la Columna B y pegarlo en la nueva Columna C(Por ejemplo, hay 3 filas de 12, el conde de 'Orange' es 1, y este 1 debe estar en la nueva columna C). Para la no-repetición de filas, basta con pegar los valores correspondientes.

  • Si los valores en la columna a se repiten, a continuación, el recuento de la palabra "Manzana" en la Columna B y pegarlo en la nueva Columna D(Por ejemplo, hay 3 filas de 12, el conde de la 'Manzana' es de 2, y 2 deben estar en la nueva columna D). Para la no-repetición de filas, basta con pegar los valores correspondientes.

  • Para repetir y no filas repetidas debido a la Columna, Si la palabra "Naranja" está presente en la Columna B, escribe 'sí' else 'No' en la Columna E.

Me gustaría tener una salida siguiente. Yo estaba tratando en python jupyter notebook, puede alguien por favor me ayude a conseguir una salida como esta:

      | Column A | Column B |Column C |Column D |Column E 
----- | -------- | ---------|---------|---------|---------
 0    | 12       | Apple    |1        |2        |Yes   
 1    | 13       | Apple    |0        |1        |No 
 2    | 15       | NaN      |NaN      |NaN      |NaN     
 3    | 16       | Orange   |1        |0        |Yes      
 4    | 141      | Apple    |0        |3        |No   

Gracias de antemano:)

1

Mejor respuesta

2

Creo que no es potente y sencilla solución para tu pregunta, pero utilice el siguiente código.

En primer lugar, definir una función count(x, a) que devuelve nan si x incluye nanel número de ocurrencia de a en x, de lo contrario. La función será utilizado para la aplicar la función.

A continuación, utilice groupby y aplicar la función de lista.

temp = df.copy().groupby('Column A')['Column B'].apply(list)

Después de eso, se convierte en temp

Column A
12         [Apple, Apple, Orange]
13                        [Apple]
15                          [nan]
16                       [Orange]
141    [Apple, nan, Apple, Apple]
Name: Column B, dtype: object

Así que, basándose en la temp, podemos contar el número de manzanas y naranjas.

Desde el df tiene los duplicados, los he borrado y añadir nuevas columnas (Columna C, D y E).

df.drop_duplicates(subset = ['Column A'], keep = "first", inplace = True)
df['Column C'] = temp.apply(count, a = "Orange").values
df['Column D'] = temp.apply(count, a = "Apple").values
df['Column E'] = df['Column D'].apply(lambda x:1 if x>=1 else 0)

Editar

Lo siento. Echaba de menos la función de contar..

def count(x, a):
    if type(x[0]) == float:
        return np.nan
    else:
        return x.count(a)
2021-11-11 12:31:49

Ahora estoy haciendo la salida como a continuación y que está a la derecha. 0 1.0 3 0.0 4 NaN 5 1.0 6 0.0 es posible cambiar el lado izquierdo número 0 3 4 5 6 de contado valores 0 1 2 3 4 5?
new_bee

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................