我有多级数据框,如下所示:
date_time name note value
list index
1 0 2015-05-22 05:37:59 Tom 129 False
1 2015-05-22 05:38:59 Tom 0 True
2 2015-05-22 05:39:59 Tom 0 False
3 2015-05-22 05:40:59 Tom 45 True
2 4 2015-05-22 05:37:59 Kate 129 True
5 2015-05-22 05:41:59 Kate 0 False
5 2015-05-22 05:37:59 Kate 0 True
我希望迭代list
,并且list
的每一行检查列value
的值,如果是False
,则删除此行。因此,最终目标是删除list
中False
value
中def delete_first_false():
for list, new_df in df.groupby(level=0):
for index, row in new_df.iterrows():
new_df=new_df.groupby('name').first().loc([new_df['value']!='False'])
return new_df
return df
的所有第一行
我使用这段代码,似乎是逻辑:
AttributeError: '_LocIndexer' object has no attribute 'groupby'
但我有这个错误
var myApp = angular.module('myApp', []);
myApp.factory('Data', function(){
var service = {
FirstName: '',
setFirstName: function(name) {
// this is the trick to sync the data
// so no need for a $watch function
// call this from anywhere when you need to update FirstName
angular.copy(name, service.FirstName);
}
};
return service;
});
// Step 1 Controller
myApp.controller('FirstCtrl', function( $scope, Data ){
});
// Step 2 Controller
myApp.controller('SecondCtrl', function( $scope, Data ){
$scope.FirstName = Data.FirstName;
});
你可以解释一下我的方法有什么问题吗?
答案 0 :(得分:3)
你的一般方法 - 使用循环 - 很少按照你想要的方式在熊猫中使用。
如果您有groupby
个对象,则应使用apply
,agg
,filter
或transform
方法。在您的情况下,apply
是合适的。
您的主要目标如下:
所以最终的目标是删除所有的第一行(每个组由...定义) 在
list
(列)中False
的{{1}}。
因此,让我们编写一个简单的函数,在单个独立的数据框中执行此操作:
value
行。很简单。
现在,让我们def filter_firstrow_falses(df):
if not df['value'].iloc[0]:
return df.iloc[1:]
else:
return df
发送给您真实数据帧的每个组:
apply