2017-06-20 36 views
2

我有一個可能相當簡單的問題。我有10年,包括有數據,並根據當天的命名列的日常DF:熊貓:拖放等於週末的列

2017-04-07  2017-04-08  2017-04-09 
    a    a    a 

我現在想放棄每一列其名,即這一天,等於一個週末。例如,在上面的例子只有這仍將:

2017-04-07  
    a    

是否有人知道如何做到這一點?

回答

2

使用weekday + isin的面具與locboolean indexing對於選擇哪些不是(~)平日所有列:

print (df) 
    2017-04-07 2017-04-08 2017-04-09 2017-04-10 
0   a   a   a   a 

#if necessary 
df.columns = pd.to_datetime(df.columns) 

print (~df.columns.weekday.isin([5,6])) 
[ True False False True] 

print (df.loc[:, ~df.columns.weekday.isin([5,6])]) 
    2017-04-07 2017-04-10 
0   a   a 

另一種解決方案:

df.columns = pd.to_datetime(df.columns) 
print (df[df.columns[~df.columns.weekday.isin([5,6])]]) 
    2017-04-07 2017-04-10 
0   a   a 

對於更老的版本大熊貓的使用方法:

print (df[df.columns[~pd.Series(df.columns.weekday).isin([5,6])]]) 
    2017-04-07 2017-04-10 
0   a   a 

或者:

print (df[df.columns[np.in1d(df.columns.weekday, [5,6])]]) 
    2017-04-08 2017-04-09 
0   a   a 
+0

謝謝!看上去不錯。我得到以下錯誤:AttributeError:'numpy.ndarray'對象沒有屬性'isin' –

+0

有問題不使用最後一個版本的熊貓,讓我一秒。 – jezrael

+0

對不起,但現在我得到這個錯誤:AttributeError:'Index'對象沒有'weekday'屬性 –