J'ai besoin de savoir combien de lignes dans un fichier de données correspondent à certaines conditions de chaque ligne.
Par exemple, pour chaque ligne, j'ai besoin de compter combien de lignes ont le même type et ont un temps de départ inférieur à l'heure de début. de la ligne et avoir et mettre fin à la fin de l'heure de fin de la ligne. p> Dans ce cas pour la rangée 0, le nombre doit être 1 car la rangée 3 est la même Tapez, il commence à 3 qui est inférieur à 5 et se termine à 14, ce qui est supérieur à 10. p> La sortie doit être la suivante: p> mais cela prend beaucoup de temps, et je veux faire la même analyse pour un Dataframe qui est exponentiellement plus grand. P> < / p>
3 Réponses :
np. (moins | plus grand | égal) .outer code> Attention à la complexité de la mémoire SUB> P>
array([1, 0, 0, 0])
Vous pouvez d'abord utiliser groupby () code> de sorte que vous ne comparez que dans "Type" qui réduirait votre espace de recherche ainsi qu'une comparaison de booléens supplémentaire (c'est-à-dire (df ["Type '] == x [0])) import pandas
df = pandas.DataFrame({'type':['A','B','A','A'], 'start':[5,3,10,3], 'end':[10,7,15,14]})
def get_count(df_type):
return df_type.apply(lambda x:sum((x['start']>df_type['start'])&(x['end']<df_type['end'])), axis=1)
df['count'] = df.groupby('type').apply(get_count).reset_index(drop=True)
Merci, ça marche génial! Pour mon cas de test, c'est au moins 50 fois plus vite.
Vous pouvez appliquer la solution de @ user3483203 à l'intérieur GET_COUNT ainsi que pour de meilleures performances.
Votre version originale n'a pas fonctionné pour moi, mais cela a fait: Je pense que la réponse de User3483203 est bonne mais, comme indiqué, pourrait être une question en termes de mémoire. Voici une autre façon qui devrait être un peu plus rapide que ce que vous avez: p>
Veuillez également publier la sortie souhaitée pour rendre la question plus claire