Python 在pandas数据框上过滤两列,其中一列表示通话时间
我有一个熊猫数据框,如下所示:Python 在pandas数据框上过滤两列,其中一列表示通话时间,python,pandas,Python,Pandas,我有一个熊猫数据框,如下所示: 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]})
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
我需要为新的数据帧应用一个过滤器,它只在19:00:00到07:00:00之间的
HOUR
或每周的DAY
=='Sunday'之间注册。预期产出:
DAY_OF_WEEK | HOUR | ID
Monday |21:02:02 | 1
Saturday |23:02:02 | 2
Monday |09:22:02 | 3
我尝试以下几点:
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()
但是,我有一个输出,其中所有行都接收到NaN
。有人能帮忙吗?试着用“|”代替“或”试着用这个代替
df2 = df.loc[(pd.to_timedelta(df.HOUR).between('06:00:00','19:00:00') | (df['DAY_OF_WEEK'] == 'Sunday'))]
更新:时间范围已更改您可以使用:
df.loc[('19' < df['HOUR']) | (df['HOUR'] < '06') | (df['DAY_OF_WEEK'] == 'Sunday')]
在19:00:00和07:00:00之间,通过这种方式,所有数据都使用.query()--df2=df.query('(HOUR>=“06:00:00”)接收NaNTry,Hourline#3和#4带来时间值超出范围我不明白你想做什么。你写了“19:00:00和07:00:00之间的时间或星期天=‘星期日’”,在例子中写了“星期一09:22:02 | 3”。09:22:02不在19:00:00和07:00:00之间。
df.loc[('19' < df['HOUR']) | (df['HOUR'] < '06') | (df['DAY_OF_WEEK'] == 'Sunday')]
DAY_OF_WEEK HOUR id
0 Monday 21:02:02 1
1 Sunday 11:22:02 2
2 Saturday 23:02:02 2