首页 > 解决方案 > 过滤 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]})

df

我需要应用一个过滤器,一个新的数据帧只HOUR在 19:00:00 到 07:00:00 或DAY_OF_WEEK== '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。任何人都可以帮忙吗?

标签: pythonpandas

解决方案


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

熊猫条件

更新:
时间范围已更改


推荐阅读