Je voudrais créer une nouvelle colonne sur le df ci-dessous, qui renvoie 1 une fois C> 55 jours. Chaque ligne suivante afficherait également 1, même si C <55 jours maximum jusqu'à C <20 jours bas. Comment ferais-je cela? Merci d'avance
df = pd.DataFrame([
['2020-01-01 01:01:00', 7147.69, 7163.32, 7147.69],
['2020-01-01 01:02:00', 7158.31, 7163.32, 7147.69],
['2020-01-01 01:03:00', 7157.08, 7163.32, 7147.69],
['2020-01-01 01:04:00', 7157.01, 7163.32, 7147.69],
['2020-01-01 01:05:00', 7159.85, 7163.32, 7147.69],
['2020-01-01 01:06:00', 7161.29, 7163.32, 7147.69],
['2020-01-01 01:07:00', 7161.29, 7163.32, 7147.69],
['2020-01-01 01:08:00', 7161.28, 7162.03, 7147.69],
['2020-01-01 01:09:00', 7161.29, 7162.03, 7147.69],
], columns=['date', 'C', '55 day high', '20 day low'])
Trame de données:
C 55 day high 20 day low
date
2020-01-01 01:01:00 7147.69 7163.32 7147.69
2020-01-01 01:02:00 7158.31 7163.32 7147.69
2020-01-01 01:03:00 7157.08 7163.32 7147.69
2020-01-01 01:04:00 7157.01 7163.32 7147.69
2020-01-01 01:05:00 7159.85 7163.32 7147.69
2020-01-01 01:06:00 7161.29 7163.32 7147.69
2020-01-01 01:07:00 7161.29 7163.32 7147.69
2020-01-01 01:08:00 7161.28 7162.03 7147.69
2020-01-01 01:09:00 7161.29 7162.03 7147.69
Je ne peux pas penser à un moyen de le faire apply()
, mais vous pouvez utiliser iterrows()
pour parcourir les lignes avec des conditions, générer une liste de résultats, puis en faire une nouvelle colonne de dataframe. Notez que j'ai modifié les données du cours pour simuler les conditions de départ et d'arrêt que vous décrivez:
import pandas as pd
df = pd.DataFrame([
['2020-01-01 01:01:00', 7147.69, 7163.32, 7147.69],
['2020-01-01 01:02:00', 7158.31, 7163.32, 7147.69],
['2020-01-01 01:03:00', 7164.08, 7163.32, 7147.69],
['2020-01-01 01:04:00', 7157.01, 7163.32, 7147.69],
['2020-01-01 01:05:00', 7159.85, 7163.32, 7147.69],
['2020-01-01 01:06:00', 7161.29, 7163.32, 7147.69],
['2020-01-01 01:07:00', 7161.29, 7163.32, 7147.69],
['2020-01-01 01:08:00', 7145.28, 7162.03, 7147.69],
['2020-01-01 01:09:00', 7161.29, 7162.03, 7147.69],
], columns=['date', 'C', '55 day high', '20 day low'])
new_col = []
state = 0
for row in df.iterrows():
if row[1]['C'] > row[1]['55 day high']:
state = 1
if row[1]['C'] < row[1]['20 day low']:
state = 0
new_col.append(state)
df['result'] = new_col
df
date C 55 day high 20 day low result
0 2020-01-01 01:01:00 7147.69 7163.32 7147.69 0
1 2020-01-01 01:02:00 7158.31 7163.32 7147.69 0
2 2020-01-01 01:03:00 7164.08 7163.32 7147.69 1
3 2020-01-01 01:04:00 7157.01 7163.32 7147.69 1
4 2020-01-01 01:05:00 7159.85 7163.32 7147.69 1
5 2020-01-01 01:06:00 7161.29 7163.32 7147.69 1
6 2020-01-01 01:07:00 7161.29 7163.32 7147.69 1
7 2020-01-01 01:08:00 7145.28 7162.03 7147.69 0
8 2020-01-01 01:09:00 7161.29 7162.03 7147.69 0
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots