熊猫-根据两个条件删除行

时间:2019-03-02 00:43:28

标签: python pandas

我有一个这样的熊猫数据框-

ColA            ColB                       ColC
Apple       2019-03-02 18:00:00        Saturday
Orange      2019-03-03 10:00:00        Sunday 
Mango       2019-03-04 09:00:00        Monday

我正在尝试根据某些条件从日期框架中删除行。

  1. 如果日期时间为上午9点及以上和下午5点及以下,则删除该行。

  2. 如果是周末(星期六和星期日),请勿删除它。

预期的输出在数据框中将没有芒果。

2 个答案:

答案 0 :(得分:2)

似乎比我想的要难

auth_key

或使用

s1=df.ColB.dt.hour.between(9,17,inclusive=False)
df.loc[s1|df.ColC.isin(['Saturday','Sunday'])]
     ColA                ColB      ColC
0   Apple 2019-03-02 18:00:00  Saturday
1  Orange 2019-03-03 10:00:00    Sunday

答案 1 :(得分:1)

要给出另一种选择,您可以这样编写:

cond1 = df.ColB.dt.hour >= 9   # After 09:00
cond2 = df.ColB.dt.hour <= 15  # Before 16:00
cond3 = df.ColB.dt.weekday < 5 # Mon-Fri

df = df[~(cond1&cond2&cond3)] 

完整示例:

import pandas as pd

df = pd.DataFrame({
    'ColA': ['Apple','Orange','Mango'],
    'ColB': pd.to_datetime([
        '2019-03-02 18:00:00', 
        '2019-03-03 10:00:00', 
        '2019-03-04 09:00:00'
     ]),
    'ColC': ['Saturday', 'Sunday', 'Monday']
})

cond1 = df.ColB.dt.hour >= 9   # After 09:00
cond2 = df.ColB.dt.hour <= 15  # Before 16:00
cond3 = df.ColB.dt.weekday < 5 # Mon-Fri

df = df[~(cond1&cond2&cond3)] # conditions mark the rows to drop, hence ~

print(df)

返回:

     ColA                ColB      ColC
0   Apple 2019-03-02 18:00:00  Saturday
1  Orange 2019-03-03 10:00:00    Sunday