Pandas 带有 pd.between_time 和 loc 的多重过滤器不起作用

Pandas multi-filter with pd.between_time and loc doesn't work

我用 pd.between_time 在 panda 中制作了一个多重过滤器,但不像其他布尔条件那样工作:

df_t = pd.DataFrame(np.random.random((110,3)))
df_t['date']=pd.date_range(start='2022-01-01', end='2022-01-11', periods=110)
df_t=df_t.set_index('date')


df_t["example"]='default'

df_t.between_time('06:00:00','07:00:00',include_start=True,include_end=False)["example"]="0607"
#Try using .loc[row_indexer,col_indexer] = value instead

df_t.between_time('06:00:00','07:00:00',include_start=True,include_end=False)

#date                               0         1           2        example
#2022-01-01 06:36:19.816513761  0.044347    0.662184    0.557581    default
#2022-01-02 06:49:32.477064220  0.524793    0.485246    0.712895    default
#2022-01-09 06:09:54.495412844  0.299960    0.174559    0.806479    default
#2022-01-10 06:23:07.155963302  0.280394    0.668141    0.637077    default

如果我尝试 .loc,python 会报错:

df_t = pd.DataFrame(np.random.random((110,3)))
df_t['date']=pd.date_range(start='2022-01-01', end='2022-01-11', periods=110)
df_t=df_t.set_index('date')
df_t["example"]='default'
df_t.loc[df_t.between_time('06:00:00','07:00:00',include_start=True,include_end=False),"example"]="0607"

首先df_t.between_time('06:00:00','07:00:00',include_start=True,include_end=False)return一个数据帧

df_t.between_time('06:00:00','07:00:00',include_start=True,include_end=False)['example'] 

那个 return 一个字符串系列但是用于布尔条件,我们必须有一个布尔系列。

我用另一种方法得到了正确的结果:

df_t.loc[((df_t.index.hour>=7)&(df_t.index.hour<23)),'example']="0723"