J'ai un dataframe pandas comme ci-dessous:
df2 = df.loc[(pd.to_timedelta(df.HOUR).between('06:00:00','19:00:00') | df['DAY_OF_WEEK'] == 'Sunday')]
calls_night_or_sunday = df[~df2].copy()
Je dois appliquer un filtre pour qu'un nouveau dataframe ne s'inscrive que là où HOUR entre 19:00:00 et 07:00:00 ou DAY_OF_WEEK == 'Sunday'. Un résultat attendu:
DAY_OF_WEEK | HOUR | ID Monday |21:02:02 | 1 Saturday |23:02:02 | 2 Monday |09:22:02 | 3
J'essaye ce qui suit:
import pandas as pd
df = pd.DataFrame({'DAY_OF_WEEK': ['Monday', 'Sunday', 'Saturday', 'Monday', 'Tuesday'],
'HOUR': ['21:02:02', '11:22:02', '23:02:02', '09:22:02', '09:02:02'],
'id': [1,2,2,3,1]})
df
mais, j'ai une sortie où toutes les lignes ont reçu NaN . Quelqu'un peut-il aider?
4 Réponses :
Essayez d'utiliser "|" au lieu de "ou"
Essayez d'utiliser .query () --- df2 = df.query ('(HOUR> = "06:00:00" et HOUR <= "19:00:00") ou Day_of_week == "Sunday")
Essayez plutôt ceci
df2 = df.loc[(pd.to_timedelta(df.HOUR).between('06:00:00','19:00:00') | (df['DAY_OF_WEEK'] == 'Sunday'))]
entre 19h00 et 7h00
De cette façon, toutes les données reçoivent NaN
import pandas as pd
df = pd.DataFrame({'DAY_OF_WEEK': ['Monday', 'Sunday', 'Saturday', 'Monday', 'Tuesday'],
'HOUR': ['21:02:02', '11:22:02', '23:02:02', '09:22:02', '09:02:02'],
'id': [1,2,2,3,1]})
df2 = df[(df.HOUR.between('19:00:00','23:59:59')) | (df.HOUR.between('00:00:00','06:00:00')) | (df.DAY_OF_WEEK == 'Sunday')]
df2
# Output
# DAY_OF_WEEK HOUR id
# 0 Monday 21:02:02 1
# 1 Sunday 11:22:02 2
# 2 Saturday 23:02:02 2
Pandas conditionsUPDATED:
timeranges changed
les lignes 3 et 4 mettent les valeurs de temps hors de la plage
Je ne comprends pas ce que tu veux faire. Vous avez écrit "où HOUR entre 19:00:00 et 07:00:00 ou DAY_OF_WEEK == 'dimanche'" et par exemple écrit "Lundi | 09: 22: 02 | 3". 09:22:02 pas entre 19:00:00 et 07:00:00.
Vous pouvez utiliser:
DAY_OF_WEEK HOUR id 0 Monday 21:02:02 1 1 Sunday 11:22:02 2 2 Saturday 23:02:02 2
Production:
df.loc[('19' < df['HOUR']) | (df['HOUR'] < '06') | (df['DAY_OF_WEEK'] == 'Sunday')]