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"
我用 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"