2016-06-07 86 views
-1

我有以下數據庫,如何通過retailer_name,visit_number,visit_date選擇一行?選擇具有多索引的行

category_name              Blades & Razors & Foam Diaper 
    retailer_name store_number visit_date           
    ABest   1177   2016-03-01 06:10:49      86  191 
           2016-03-24 08:59:33      129  222 
           2016-03-29 04:34:36      114  323 
           2016-04-12 10:56:26      225  235 
        1182   2016-03-02 08:54:00      161  217 

比如我想一行'ABest'11822016-03-02 08:54:00

感謝

+0

如果您真的用熊貓嗎? – nehemiah

回答

2

我認爲你可以使用locslicers - docs

import pandas as pd 

df = pd.DataFrame({'Blades & Razors & Foam': {('ABest', 1177, pd.Timestamp('2016-03-01 06:10:49')): 86, ('ABest', 1177, pd.Timestamp('2016-03-29 04:34:36')): 114, ('ABest', 1177, pd.Timestamp('2016-03-24 08:59:33')): 129, ('ABest', 1177, pd.Timestamp('2016-04-12 10:56:26')): 225, ('ABest', 1182, pd.Timestamp('2016-03-02 08:54:00')): 161}, 'Diaper': {('ABest', 1177, pd.Timestamp('2016-03-01 06:10:49')): 191, ('ABest', 1177, pd.Timestamp('2016-03-29 04:34:36')): 323, ('ABest', 1177, pd.Timestamp('2016-03-24 08:59:33')): 222, ('ABest', 1177, pd.Timestamp('2016-04-12 10:56:26')): 235, ('ABest', 1182, pd.Timestamp('2016-03-02 08:54:00')): 217}}) 
df.columns.names=[u'category_name'] 
df.index.names=[u'retailer_name', u'store_number', u'visit_date'] 
print (df) 
category_name         Blades & Razors & Foam Diaper 
retailer_name store_number visit_date           
ABest   1177   2016-03-01 06:10:49      86  191 
          2016-03-24 08:59:33      129  222 
          2016-03-29 04:34:36      114  323 
          2016-04-12 10:56:26      225  235 
       1182   2016-03-02 08:54:00      161  217 

idx = pd.IndexSlice 
print (df.loc[idx['ABest',1182,'2016-03-02 08:54:00'],:]) 
category_name         Blades & Razors & Foam Diaper 
retailer_name store_number visit_date           
ABest   1182   2016-03-02 08:54:00      161  217 

編輯:

如果您需要更改等級visit_dateto_datetime,你可以使用:

import pandas as pd 

df = pd.DataFrame({'Blades & Razors & Foam': {('ABest', 1182, '2016-03-02 08:54:00'): 161, ('ABest', 1177, '2016-04-12 10:56:26'): 225, ('ABest', 1177, '2016-03-01 06:10:49'): 86, ('ABest', 1177, '2016-03-24 08:59:33'): 129, ('ABest', 1177, '2016-03-29 04:34:36'): 114}, 'Diaper': {('ABest', 1182, '2016-03-02 08:54:00'): 217, ('ABest', 1177, '2016-04-12 10:56:26'): 235, ('ABest', 1177, '2016-03-01 06:10:49'): 191, ('ABest', 1177, '2016-03-24 08:59:33'): 222, ('ABest', 1177, '2016-03-29 04:34:36'): 323}}) 
df.index.names=[u'retailer_name', u'store_number', u'visit_date'] 
print (df) 
               Blades & Razors & Foam Diaper 
retailer_name store_number visit_date           
ABest   1177   2016-03-01 06:10:49      86  191 
          2016-03-24 08:59:33      129  222 
          2016-03-29 04:34:36      114  323 
          2016-04-12 10:56:26      225  235 
       1182   2016-03-02 08:54:00      161  217 

df.reset_index(inplace=True) 
df['visit_date'] = pd.to_datetime(df['visit_date']) 
df.set_index(['retailer_name','store_number','visit_date'], inplace=True) 


idx = pd.IndexSlice 
print (df.loc[idx['ABest',1182,'2016-03-02 08:54:00'],:]) 
               Blades & Razors & Foam Diaper 
retailer_name store_number visit_date           
ABest   1182   2016-03-02 08:54:00      161  217 
+0

我得到KeyError:('ABest',1182,Timestamp('2016-03-02 08:54:00')) –

+0

嗯,我沒有datetimeindex,請給我一秒。 – jezrael

+0

有趣的是,對我來說它很好。你的熊貓版本是什麼? 'print pd .__ version__' – jezrael