1
votes

Comment puis-je compter les nombres supérieurs à 0 dans une partie de colonnes par ligne dans un dataframe et l'enregistrer dans une colonne

 entrez la description de l'image ici

Je souhaite compter le nombre de colonnes dont la valeur est supérieure à 0 ligne par ligne pour une colonne spécifique sélectionnée comme

lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche et enregistrez-le dans une colonne séparée

par exemple, le nombre de lignes dans id_recipient 0 est 2: (lundi, samedi) , pour id_recipient 1 est également 2: (lundi, mardi) etc.


0 commentaires

4 Réponses :


4
votes

Nous pouvons utiliser DataFrame.ne qui signifie différent de et DataFrame.sum sur l'axe des colonnes ( axis = 1 ).

J'ai supposé que votre dataframe s'appelait df

import pandas as pd

columns = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
df['count'] = df[columns].ne(0).sum(axis=1)


1 commentaires

Je pense que c'est la meilleure solution car elle utilise le .ne natif (0)



0
votes

Vous pouvez le faire en une seule ligne simplement comme ceci:

df['count'] = [len(list(filter(list(df['monday', 'tuesday', 'wednesday', 'thursday','friday','saturday','sunday'].iloc[x]), lambda y: y > 0))) for x in range(len(df['monday']))]

J'espère que cela aide :)


0 commentaires

0
votes

Nous avons utilisé applymap avec la fonction à la volée, si x> 0 à 1, sinon 0. Nous l'avons additionné sur l'axe 1 et l'avons placé sous la nouvelle colonne "count"

import pandas as pd

columns = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
df['count'] = df[columns].applymap(lambda x : 1 if x > 0 else 0).values.sum(axis=1)


0 commentaires

2
votes

Voici ma solution:

df['No_rows'] = (test_df[daysofweek] > 0).sum(axis=1)

Pour configurer le DataFrame suivant: entrez la description de l'image ici

Maintenant, je crée une liste de toutes les colonnes des jours de la semaine:

daysofweek = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday',
              'saturday', 'sunday']

Maintenant, je crée une nouvelle colonne qui résume la valeur logique des colonnes de tous les jours de la semaine sur toutes les lignes (vectorisée donc c'est beaucoup plus rapide qu'en utilisant par exemple .iterrows ())

dict = {'ID_recipient':[0, 1, 2, 3, 4], 
        'monday': [13, 10, 9, 12, 9], 
        'tuesday':[0, 1, 0, 1, 0],
        'wednesday':[0,0,0,0,1],
        'thursday':[0,0,0,0,0],
        'friday':[0,0,0,0,0],
        'saturday':[1,0,1,0,0],
        'sunday':[0,0,0,0,0]} 
  
df = pd.DataFrame.from_dict(dict) 
  
df

Cela me donne la sortie correcte comme vous le souhaitez:

 entrez la description de l'image ici

J'espère que cela vous aidera!


0 commentaires