我在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中执行此操作?
答案 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