我有一个可能相当简单的问题。我有一个10年的每日df,包含有数据的列,并根据当天命名:
2017-04-07 2017-04-08 2017-04-09
a a a
我现在想要删除每个列的名称,即哪一天等于周末。例如,在上面的例子中,只剩下这个:
2017-04-07
a
有人知道怎么做吗?
答案 0 :(得分:2)
使用weekday
+ isin
屏蔽loc
和boolean 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