2014-09-29 80 views
1

如何对熊猫数据框进行子集化以获取特定月份数据的行?子集熊猫数据框在特定月份的日期列?

我有一个2010-01-01格式的日期列。

如果它被编入索引,我会用

df.ix[date1:date2] 

但是,如果数据是在一列我该怎么办?

+0

你的意思是像'DF [(DF [ '日期']> =日期1)(DF ['日期“] <= DATE2)]'? – EdChum 2014-09-29 13:05:09

回答

2

在DataFrame中选择范围可以通过使用蒙版来完成。

面具只是正常的pd.Series含有TrueFalse元素。

采用常规例子爪牙:

df_minions = pd.DataFrame({ 
    'color':['Red', 'Green', 'Blue', 'Brown'] * 2, 
    'name':['Burnie', 'Stinky', 'Swimmy', 'Bashy', 'Flamie', 'Stabbie', 'Blubb', 'Smashie']}) 
    color  name 
0 Red Burnie 
1 Green Stinky 
2 Blue Swimmy 
3 Brown Bashy 
4 Red Flamie 
5 Green Stabbie 
6 Blue Blubb 
7 Brown Smashie 

选择所有褐色的爪牙很容易做到这样的:

brown_minion_mask = df_minions['color'] == 'Brown' 
0 False 
1 False 
2 False 
3  True 
4 False 
5 False 
6 False 
7  True 

df_minions[brown_minion_mask] 
    color  name 
3 Brown Bashy 
7 Brown Smashie 

现在你对选择的日期的具体问题:

首先,我将添加一个spawned列,其中充满日期

df_minions['spawned'] = [datetime(2015, m, 5) for m in range(4,6)] * 4 
    color  name spawned 
0 Red Burnie 2015-04-05 
1 Green Stinky 2015-05-05 
2 Blue Swimmy 2015-04-05 
3 Brown Bashy 2015-05-05 
4 Red Flamie 2015-04-05 
5 Green Stabbie 2015-05-05 
6 Blue Blubb 2015-04-05 
7 Brown Smashie 2015-05-05 

现在,我们可以访问一个非常特殊的pd.TimeSeries妥善这是.dt accessor

df_minions.spawned.dt.month 
0 4 
1 5 
2 4 
3 5 
4 4 
5 5 
6 4 
7 5 

我们可以使用此操作来掩盖我们的数据帧,就以同样的方式,因为我们没有用的颜色我们的奴才。

may_minion_mask = df_minions.spawned.dt.month == 5 
df_minions[may_minion_mask] 
    color  name spawned 
1 Green Stinky 2015-05-05 
3 Brown Bashy 2015-05-05 
5 Green Stabbie 2015-05-05 
7 Brown Smashie 2015-05-05 

当然,你可以做你想做的任何一种操作的面具

not_spawned_in_january = df_minions.spawned.dt.month != 1 
summer_minions = ((df_minions.spawned > datetime(2015,5,15)) & 
        (df_minions.spawned < datetime(2015,9,15)) 
name_endswith_y = df_minions.name.str.endswith('y') 
相关问题