具有特殊条件的选择行

时间:2016-09-08 15:27:14

标签: python pandas

我有这个数据框:

TIMESTAMP equipmeent1 equipement2 class_energy
    2016-05-10 04:30:00 107 0 high
    2016-05-10 04:40:00 100 90 medium
    2016-05-10 04:50:00 106 0 low
    2016-05-10 05:00:00 107 0 high

我尝试选择具有特殊条件的行:

x.loc[x['class_energy'] == 'high',  x['TIMESTAMP'] > 2016-05-10 04:30:00 04:10:00,x['TIMESTAMP'] < 2016-05-10 05:00:00 ]

但是我遇到了这个问题:

IndexingError                             Traceback (most recent call last)
<ipython-input-241-b47c8396bb9a> in <module>()
----> 1 x.loc[x['class_energy'] == 'high', x['PERIODE_TARIF'] =='HP']

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
      getitem 中的

(自我,密钥)          1292          1293如果type(key)是元组:        - &GT; 1294返回self._getitem_tuple(键)          1295其他:          1296返回self._getitem_axis(key,axis = 0)

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
     _getitem_tuple中的

(self,tup)           802继续           803        - &GT; 804 retval = getattr(retval,self.name)._ getitem_axis(key,axis = i)           805           806返回retval

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
     _getitem_axis中的

(self,key,axis)          1437返回self._get_slice_axis(键,轴=轴)          1438 elif is_bool_indexer(关键):        - &GT; 1439返回self._getbool_axis(键,轴=轴)          1440 elif is_list_like_indexer(key):          1441

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
     _getbool_axis中的

(self,key,axis)          1301 def _getbool_axis(self,key,axis = 0):          1302 labels = self.obj._get_axis(axis)        - &GT; 1303 key = check_bool_indexer(标签,键)          1304 inds,= key.nonzero()          1305试试:

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
     

在check_bool_indexer中(ax,key)          1799 mask = com.isnull(result._values)          1800 if mask.any():        - &GT; 1801引发IndexingError(&#39;提供不可对齐的布尔系列键&#39;)          1802          1803 result = result.astype(bool)._ values

IndexingError: Unalignable boolean Series key provided

1 个答案:

答案 0 :(得分:2)

您需要使用&并使用括号:

x.loc[(x['class_energy'] == 'high') & (x['TIMESTAMP'] > '2016-05-10 04:30:00') & (x['TIMESTAMP'] < '2016-05-10 05:00:00') ]

目前还不清楚您在原始代码中随机包含04:10:00的意图

您必须使用&代替and,因为我们正在比较值数组,由于运算符优先级,条件也需要括在括号中

你所做的只是将每个条件与,分开,这在这里没有意义,并且因为它将你的args视为元组而导致评估错误

如果您想使用以下两个条件,那么您的错误x.loc[x['class_energy'] == 'high', x['PERIODE_TARIF'] =='HP']与您发布的代码不符:

x.loc[(x['class_energy'] == 'high') & (x['PERIODE_TARIF'] =='HP')]

应该有效