Python / Pandas基于列中非值的外观删除列

时间:2016-10-28 12:38:35

标签: python pandas

我正在使用Pandas在Python中编写一些代码来处理CSV文件并在数据框中以各种方式处理数据。目前,使用我已编写的脚本,df.head()调用以下数据帧(简化):

        Facility    Facility    Servers     Servers
Date    27/10/2016  28/10/2016  27/10/2016  28/10/2016
00:30   7           6           5           5
01:00   4           5           5           7
01:30   7           8           6           5
02:00   7           2           5           5

我现在要做的是删除不包含特定日期的列。因此,在这种情况下,如果我想删除所有不包含28/10/2016的列,结果将是:

        Facility    Servers     
Date    28/10/2016  28/10/2016
00:30   6           5
01:00   5           7
01:30   8           5
02:00   2           5

我已经做了很多阅读并检查了StackOverflow上的各种帖子,但是找不到合适的解决方案。有没有人知道如何使用某种条件语句删除我的数据框中没有出现28/10/2016的任何列?

1 个答案:

答案 0 :(得分:1)

我认为您需要先从DataFrame的第一行创建definition on Wikipedia,然后按df.iloc[1:]删除第一行:

print (df.columns)
Index(['Facility', 'Facility', 'Servers', 'Servers'], dtype='object')

print (df.iloc[0])
Facility    27/10/2016
Facility    28/10/2016
Servers     27/10/2016
Servers     28/10/2016
Name: Date, dtype: object

df.columns = pd.MultiIndex.from_arrays([df.columns, pd.to_datetime(df.iloc[0])])
df = df.iloc[1:]
print (df)
        Facility               Servers           
Date  2016-10-27 2016-10-28 2016-10-27 2016-10-28
00:30          7          6          5          5
01:00          4          5          5          7
01:30          7          8          6          5
02:00          7          2          5          5

最后一次使用MultiIndex.from_arrays

idx = pd.IndexSlice
print (df.loc[:,idx[:,['2016-10-28']]])
        Facility    Servers
Date  2016-10-28 2016-10-28
00:30          6          5
01:00          5          7
01:30          8          5
02:00          2          5