Reputation: 1010
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
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