如何对pandas数据框进行子集以获取包含特定月份数据的行?
我有一个2010-01-01格式的日期列。
如果已编入索引,我会使用
df.ix[date1:date2]
但如果数据在列中,该怎么办?
答案 0 :(得分:3)
可以使用蒙版来选择DataFrame中的范围。
屏蔽只是包含pd.Series
和True
元素的正常False
。
使用小兵的一般例子:
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
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')
我们可以使用此操作来屏蔽我们的数据帧,就像我们对我们的小兵的颜色一样。
<div ng-controller="ExampleController">
<div ng-repeat="bit in myHTML track by $index" >
<p ng-bind-html="bit"></p>
</div>
您当然可以在面具中进行任何类型的操作
(function(angular) {
'use strict';
angular.module('bindHtmlExample', ['ngSanitize'])
.controller('ExampleController', ['$scope', function($scope) {
$scope.myHTML = [];
for (var i=0; i<6; i++){
$scope.myHTML[i] =
'I am an <code>HTML</code>string with ' +
'<a href="#">links!</a> and other <em>stuff</em>';
}
console.log($scope.myHTML)
}]);
})(window.angular);