从pandas groupby对象返回每个组的子集

时间:2015-11-03 17:20:05

标签: python pandas dataframe multi-level loc

我有多级数据框,如下所示:

                      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,则删除此行。因此,最终目标是删除listFalse valuedef 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;
});
你可以解释一下我的方法有什么问题吗?

1 个答案:

答案 0 :(得分:3)

你的一般方法 - 使用循环 - 很少按照你想要的方式在熊猫中使用。

如果您有groupby个对象,则应使用applyaggfiltertransform方法。在您的情况下,apply是合适的。

您的主要目标如下:

  

所以最终的目标是删除所有的第一行(每个组由...定义)   在list(列)中False的{​​{1}}。

因此,让我们编写一个简单的函数,在单个独立的数据框中执行此操作:

value

行。很简单。

现在,让我们def filter_firstrow_falses(df): if not df['value'].iloc[0]: return df.iloc[1:] else: return df 发送给您真实数据帧的每个组:

apply