通过布尔比较对列进行分组(类似于使用Matlab' s grpstats)

时间:2014-07-03 08:55:47

标签: python pandas

我在Pandas中有一个具有以下格式的数据框(还有一堆其他列)

   chip  WL     ok
0     1   1   True
1     1   2   True
2     1   3   True
3     1   4   True
4     2   1  False
5     2   2   True
6     2   3   True
7     2   4   True

我想逐个芯片分组,计算每个chip的WL数量,并对and列中的每个值执行逻辑ok。预期的输出应如下所示:

   chip  WLs     ok
0     1   4    True
1     2   4   False

在Matlab中,这可以通过使用以下命令来实现:

a = grpstats(CellYield,{'chip'},{@all},'DataVars',{'ok'});
a.Properties.VarNames{2} = 'WLs';
a.Properties.VarNames{3} = 'ok';

哪个会输出这样的数据集:

chip WLs    ok
1    4      True
2    4      False

我如何在Python和Pandas中执行此操作?

1 个答案:

答案 0 :(得分:3)

使用groupby我们可以传递函数的字典以应用于每个列,对于WL列,我们应用来自count的{​​{1}},pandas.Series对所有值应用测试,如果系列中的所有值都为all,则返回True

True

<强>更新

为了将这些值分配回原始数据框,您可以使用False,遗憾的是我无法弄清楚如何将不同的函数应用于不同的列,因为转换不会接受In [6]: df.groupby('chip').agg({'WL':pd.Series.count, 'ok':all}) Out[6]: WL ok chip 1 4 True 2 4 False [2 rows x 2 columns] 函数或用户定义的函数。

所以你可以在2次传球中这样做:

transform