est la fonction de chute incorrecte? Besoin d'une guidage d'experts sur la manière de résoudre ce problème:
Date, Time Code> à partir de CS CODE> ... LI>
- ... puis comparez une colonne (
VAL2 code>), seulement conservant les lignes où la première ligne du VAL2 code> est la plus élevée li>
ul> code: p> xxx pré>
échantillon de données: p> xxx pré> Sortie attendue: p> xxx pré> sortie réelle: p> xxx pré> p>
3 Réponses :
Réponse modifiée:
Après discussion dans les commentaires, je pense que c'est ce dont vous avez besoin (j'ai ajouté du code pour reproduire le problème): p> Le résultat est : p> Cela fait une initiation: un groupe de groupe dans une groupeby. P> Groupes de groupe externe par date parce que celles-ci sont les groupes que nous voulons rechercher le Fichier in. p> INTER GROUPECH effectue des recherches pour le fichier correct dans un groupe et ne conserve que les lignes de ce fichier. P> << Réponse originale: P> de construire un fichier de données avec des doublons et itération à travers elle, vous pouvez simplement utiliser Il regroupe toutes les lignes qui ont les mêmes valeurs dans
groupy code>: p>
Date de date CODE> et
TIME CODE> COLONNES, puis, pour chaque groupe, il ne laisse que la ligne avec la valeur la plus élevée de
VAL2 p> P> P> P> P> P> P> P> P> P> P> P> P> P > Le résultat est le suivant: p>
Salut @ michcio1234, merci pour le conseil. Mais je pense que je ne peux pas utiliser groupby. J'ai mis à jour mes exemples de données ci-dessus. Je pense que j'ai besoin d'utiliser itérant. Mais je ne suis pas expert, aucun conseil portable est très apprécié.
Pour supprimer les rangées que vous voulez:
Utilisation: p>
cs.sort_index(inplace=True)
Bonjour @valdi_bo, merci pour le conseil. Mais je pense que cela ne donnera pas de résultat attendu. J'ai mis à jour mon exemple d'échantillon / données ci-dessus. Désolé si je ne l'ai pas fourni clairement plus tôt.
Les lignes "invalides" ont été supprimées en raison de l'index. Après le PD.ConCat, il faut réinitialiser l'index à l'aide de Cs.Reset_index (surplacez-le = true, goutte = true). Sans l'index de réinitialisation, l'index démarre de 0 pour chaque fichier. Et il a été supprimé par la fonction de chute car certaines des valeurs d'index ont été répétées.
Bien que je puisse obtenir le résultat correct, toujours la colonne de filtrage par date ne fonctionne pas (cs.drop (cs [(CS.DATE). = DP.Values [0] [0])). Si cela fonctionne, je n'avais pas à "réinitialiser" l'index. Ou, est-ce que je l'ai utilisé à tort? P>
Merci tout pour votre aide. Si vous avez un moyen meilleur et élégant d'obtenir la production attendue, cela serait apprécié. P>
Cordialement Cordialement. P>
cs = pd.concat([pd.read_csv(f) for f in fnames]) cs.reset_index(inplace=True,drop=True) dp = cs[cs.duplicated(['date','time'],keep=False)] dp = dp.sort_values(['date','time'],ascending=True) while len(dp)>0: if dp.values[0][3] > dp.values[1][3]: if dp.index[0] > dp.index[1]: cs.drop(cs[(cs.date==dp.values[0][0]) & (cs.index < dp.index[0])].index, inplace=True) dp.drop(dp[(dp.date==dp.values[0][0])].index, inplace=True)
Si vous avez des numériques avec le nom de fichier, cela devrait fonctionner:
df [df.file.eq (df.groupby («date») ['fichier »]. Transform (' Max '))] code>
Comme @Michcio dit, vous vous trouvez à tout moment en construisant manuellement un fichier de données avec quelque chose comme
cs [cs.dupliqué (...)] code>, c'est une odeur de code que vous devriez utiliser
groupeby () < / code>. Et ensuite le
sort_values code> sur le contenu du groupe peut être effectué avec un agrégat comme
.agg ({'val': 'max'}) code>
Il y a 274 Pandas QUESTIONS sur les doublons , c'est sûrement une duplication, dont?
Connexes: Pandas: Drop DUPLICATES en GroupeBy 'Date'
Votre question se résume à: "Débutant des doublons exacts de
['date'," temps "] code> colonnes, comme Ceci ; puis faire un composé
groupeby ([" date ', "heure"]) code>; résumée / agrégat par max valeur sur
VAL2 code> colonne "*
Bonjour à tous, merci pour les commentaires. Le jeu de données d'une date peut apparaître dans 2 fichiers et il suffit d'utiliser uniquement à partir de fichier1 ou de fichier2. Comment savoir dans quel fichier à extraire est basé sur la colonne VAL2 de la première ligne de la date dans les deux fichiers. Si le VAL2 de la première ligne de date X de File1 est supérieur à VAL2 de la première rangée de la même date X de File2, j'utiliserai alors un jeu de données de date X dans File1. Et vice versa. Je vais essayer de mettre à jour mes exemples de données.
@ anky_91, SMCI, je pense que mon cas est un peu différent, je ne peux pas utiliser le groupeby. Mais je peux me tromper cependant. S'il vous plaît éclairer moi. Merci.
@spx actuellement votre question n'est toujours pas claire. Par exemple. "Garder les lignes où la première rangée de VAL2 est la plus élevée" n'a pas beaucoup de sens. Je pense que je sais ce que vous essayez d'atteindre, mais j'aimerais être sûr. Veuillez éditer votre question. Essayez de ne pas suggérer la solution (car c'est ce que nous recherchons), mais plutôt formuler le problème sans ambiguïté.
@ MICHCIO1234 En fait, je traiterais des données sur les contrats à terme (comme des actions / stocks). Les contrats à terme peuvent avoir plusieurs périodes de contrat. Dis qu'il y a des périodes juin / juillet / août / etc. Je veux juste "récolter" des données avec les plus transactées. Si juin va expirer, son volume (VAL2 dans mes données d'échantillons) diminuera et le volume de juillet sera supérieur à celui des juin. Au lieu de vérifier manuellement ou du code carré de la date, j'utilise le script pour extraire uniquement la journée avec le plus grand volume (peut généralement dire à l'heure d'ouverture => La première ligne de volume est la plus élevée entre juin et juillet). J'espère que cela clarifie. Merci.