je le dataframe suivant s:Remplacement les données d'un élément de trame de données avec la ligne suivante
0 Symbol DataDiscriminator Open
1 AKAM Summary -
2 AKAM Lot 2017-05-12, 16:20:00
3 APA Summary -
4 APA Lot 2017-03-31, 16:20:00
5 APA Lot 2017-03-24, 16:20:00
je voudrais définir la valeur de Ouvrir élément de DataDiscriminator = « Résumé » avec le date de la ligne suivante puis retirez les DataDiscriminator = lignes "Lot" pour obtenir:
0 Symbol DataDiscriminator Open
1 AKAM Summary 2017-05-12
3 APA Summary 2017-03-31
...
La logique de travail actuelle est:
for i, row in s.iterrows():
if s.DataDiscriminator[i] == "Summary":
o = s.Open[i+1] # Get the next row's Open data
s = s.set_value(i, "Open", o[0:10]) # Slice out the time in the new Open data
s = s[s.DataDiscriminator == "Summary"] # Keep only the Summary rows in the dataset
Existe-t-il une meilleure façon vectorisée d'y parvenir?
Merci @JohnE. Comment puis-je découper le composant time du champ * Open *? 's.loc [s.DataDiscriminator == 'Summary', 'Open'] = s.Open.shift (-1) [0:10]' donne NaN après quelques lignes dans * Open *. – reservoirinvest
Si c'est une chaîne, essayez 'df.Open.str.slice (12)'. D'une manière générale, pour les chaînes, vérifiez les docs pour les accesseurs de chaînes ('str'). Ou si vous avez la colonne stockée en tant que datetime pandas/python, vous pouvez utiliser un accesseur datetime ('dt') – JohnE