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.
4 Réponses :
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)
Je pense que c'est la meilleure solution car elle utilise le .ne natif (0)
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 :)
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)
Voici ma solution:
df['No_rows'] = (test_df[daysofweek] > 0).sum(axis=1)
Pour configurer le DataFrame suivant:
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:
J'espère que cela vous aidera!