freddy888
freddy888

Reputation: 1010

Pandas: Drop Columns that are equal to weekend

I have a probably rather simple question. I have a daily df for 10 years consisting of columns that have data and are named according to the day:

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

I now want to drop every column which name, i.e. which day, is equal to a weekend. For example, in the above example only this would remain:

2017-04-07       
   a               

Does anybody know how to do this?

Upvotes: 2

Views: 440

Answers (1)

jezrael
jezrael

Reputation: 862661

Use weekday + isin for mask with loc and boolean indexing for select all columns which are not (~) weekdays:

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

Another solution:

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

For older verison of pandas use:

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

Or:

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

Upvotes: 2

Related Questions