Comment obtenir le nombre d'éléments dans les lignes ainsi que de vérifier un élément est présent ou non, et enfin maintenir la première ligne en python?

0

La question

Supposons que j'ai un bloc de données comme suit:

 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']}) 

Sur la base de ces conditions:

  • Si les valeurs dans la colonne A sont répétés, puis de compter le mot "Orange" dans la Colonne B et de la coller dans la nouvelle Colonne C(Par exemple, il y a 3 lignes de 12, le comte de 'Orange' est 1, et c'1 devrait être dans la nouvelle colonne C). Pour la non-répétition des lignes, il suffit de coller les valeurs correspondantes.

  • Si les valeurs dans la colonne A sont répétés, puis de compter le mot "Apple" dans la Colonne B et de la coller dans la nouvelle Colonne D(Par exemple, il y a 3 lignes de 12, le nombre de "Pomme" est de 2, ce 2 devrait être dans la nouvelle colonne D). Pour la non-répétition des lignes, il suffit de coller les valeurs correspondantes.

  • Répétées et non-lignes répétées en raison d'Une Colonne, Si le mot "Orange" est présent dans la Colonne B, écrire " oui "d'autre" Non " dans la Colonne E.

Je voudrais avoir une sortie suivante. J'ai essayé en python jupyter portable, quelqu'un peut-il m'aider à obtenir un résultat comme ceci:

      | 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   

Merci d'avance:)

1

La meilleure réponse

2

Je pense qu'il n'est pas puissant et simple solution pour votre question, mais utiliser le code suivant.

Tout d'abord, de définir une fonction count(x, a) qui renvoie nan si x comprend nanle nombre d'occurence de a dans x, autrement. Cette fonction sera utilisée pour l'application de fonction.

Ensuite, utilisez groupby et appliquer la fonction de liste.

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

Après cela, la température devient

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

Donc, basé sur le temp, on peut compter le nombre de pommes et des oranges.

Depuis df a des doublons, je les ai retirées et d'ajouter de nouvelles colonnes (Colonnes C, D et 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)

Modifier

Je suis désolé. J'ai raté la fonction de comptage..

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

Maintenant, je suis sortie comme ci-dessous et qui est juste. 0 0.0 1.0 3 4 NaN 5 1.0 6 0.0 est-il possible de changer le côté gauche, le numéro 0 3 4 5 6 de valeurs comptées de 0 1 2 3 4 5?
new_bee

Dans d'autres langues

Cette page est dans d'autres langues

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